【Xamarin.Android】使用实体框架构建Android应用程序

简介: 数据是任何应用程序开发的一个重要组成部分,移动应用程序也不例外;作为开发人员,处理数据是我们的一个重要决策,对移动应用开发也是如此。从键值对存储到SQLite,有许多选项可用,但是,.NET开发者往往特别熟悉的是实体框架。

数据是任何应用程序开发的一个重要组成部分,移动应用程序也不例外;作为开发人员,处理数据是我们的一个重要决策,对移动应用开发也是如此。从键值对存储到SQLite,有许多选项可用,但是,.NET开发者往往特别熟悉的是实体框架。

实体框架是一个对象/关系映射(O/RM),它允许.NET开发人员使用.NET对象处理数据库,从而消除了开发人员通常需要编写的更多数据访问代码的需要。实体框架很棒,但在实体框架核心出现之前,在移动开发项目中很难使用。实体框架核心是一种轻量级的、可扩展的跨平台版本的实体框架数据访问技术。

什么是实体框架核心?

E实体框架核心(EF核心)与全面实体框架相比引入了许多新特性和改进,但完全是一个全新的代码库,跨平台的应用程序的优化。如果你有实体框架的经验,你会发现EF核心很熟悉。尽管它并不是所有的特性都相同,但是在将来的版本中会出现很多特性(比如延迟加载和连接弹性)。因为EF核心与.NET标准兼容,我们现在可以Xamarin.Android中使用。

由于它的易用性,在相当长的一段时间里EF的核心一直是我最喜欢的项目。挑战始终是,“我如何Xamarin程序中使用实体框架?“在这个博客文章中,我将向您展示如何通过使用支持实体框架的核心数据库来构建一个Android应用程序。

入门

创建.NET标准库

开始入门,让我们创建一个.NET标准库。NET是一个正式的规范.NET API的标准,目的是让.NET API可以运行与所有网络运行环境,类似于可移植类库。这个库是我们放置所有共享应用程序代码的地方,包括我们的实体框架核心逻辑。

新创建一个解决方案,添加一个便携式类库(PCL)到解决方案中。

1

因为这不是一个.NET标准(netstandard)类库,我们可以通过右键单击项目并导航到属性来转换它:

12.28.2016-12.19

根据NuGet,Microsoft.EntityFrameworkCore和Microsoft.EntityFrameworkCore.Sqlite要求的包指定库需要指向netstandard 1.3。我们在同一个地方改变目标:

12.28.2016-12.21

然后我们需要添加实体框架包装我们的项目。右击References文件夹,选择Manage NuGet Packages…,并安装 Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.Sqlite包。

太伟大了!现在我们开始进入编写一些实体框架代码。

定义DbContext

如果您以前使用过实体框架,你会非常熟悉如何定义一个DbContext和我们的基本模型,定义我们的数据库架构。

L让我们用一个简单的数据模型,我们叫Cat开始。

using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
...
    public class Cat
    {
        [Key]
        public int CatId { get; set; }
        public string Name { get; set; }
        public int MeowsPerSecond { get; set; }
    }

接下来,让我们确保我们的Cat类是DbContext的一部分,并且是通过定义一个新的上下文CatContext。

using Microsoft.EntityFrameworkCore;
...
    public class CatContext : DbContext
    {
        public DbSet Cats { get; set; }

        private string DatabasePath { get; set; }

        public CatContext()
        {

        }

        public CatContext(string databasePath)
        {
            DatabasePath = databasePath;
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite($"Filename={DatabasePath}");
        }
    }

Using Entity Framework Core with 在Xamarin.Android中使用

入门

现在,在包含EF核心的.NET标准库中,我们配置了数据库配置,让我们创建一个Android项目来连接数据库。右击解决方案,点击Add Project,并选择Single-View App (Android).

12.28.2016-12.22

就像以前一样,我们需要添加
Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.SqliteNuGet包到我们的Android项目。

实施背景

首先,我们需要确保我们的Xamarin.Android项目引用我们的.NET标准库。 在Android项目中,右击References文件夹,选择Add Reference…,,然后选择我们在博客开始时创建的库。点击OK来保存reference。

12.28.2016-13.01

现在我们有了库, 让我们在MainActivity.cs中实现某些实体框架代码!

using System.IO;
using Microsoft.EntityFrameworkCore;
using System.Diagnostics;
using EntityFrameworkWithXamarin;
using EntityFrameworkWithXamarin.Core;
using System.Collections.Generic;
...
  [Activity(Label = "EntityFrameworkWithXamarin.Droid", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
      {
        int count = 1;

        protected async override void OnCreate(Bundle bundle)
        {
          base.OnCreate(bundle);

          // Set our view from the "main" layout resource
          SetContentView(Resource.Layout.Main);
          // Get our button from the layout resource,
          // and attach an event to it
          Button button = FindViewById

现在添加TextView1到我们的Resources > Layout > Main.axml中,在MainActivity中我们会使用它。

  
  
   
  

下一步,设置我们的Android项目为启动项目并在模拟器中运行,哎呀,看来我们会得到一个错误:

Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'no such table: Cats'.

生成EF核心迁移

我们缺少一个叫做Migrations的核心实体框架功能,它创建数据库架构。此刻,没用从Xamarin.Android项目或者.NET标准库中生成实体框架Migrations的一个重要途径。让我们使用一个快速的解决方法,它通过创建一个新的netcore控制台应用来生成Migrations。

12.28.2016-13.56

为产生Migrations,请添 Microsoft.EntityFrameworkCore.Tools.DotNetMicrosoft.EntityFrameworkCore.Design,和Microsoft.EntityFrameworkCoreNuGet包到项目中,我们可以使用命令行来生成Migrations。

注: Microsoft.EntityFrameworkCore.Tools.DotNet 目前抢鲜版,你需要在NuGet包管理器中选中Include prerelease复选框,如果你之前没有选中的话。

现在我们需要将Cat和CatContext移动过去,确保DbContext能产生Migrations。现在我们能生成我们的内容的一个架构,让我们使用新的dotnet工具来完成。在我们当前的控制台应用目录打开一个新的控制台:

12.28.2016-14.03

运行命令生成Migration:

dotnet ef migrations add Initial

我们看到下面的输出:

12.28.2016-14.11

现在我们需要进行我们的项目迁移文件夹中生成的初始迁移,并将它们移到.NET标准库中。

注意:你可以简单的改变这两个生成的文件到你的netstandard命名空间的命名空间的名称。

把它们放在一起

再次运行Xamarin.Android项目,现在我们可以在我们的Android应用成功使用实体框架核心来存储数据!

12.28.2016-14.16

我们可以仔细看看,通过打开Android设备监控器,得到使用模拟器生成的SQLite文件。查找data/data/files文件夹,我们看到创建了Cats.db数据库文件。

12.28.2016-14.19

我们可以使用一些SQLite浏览器工具选择文件来打开它,点击Pull a file from the device,并保存到本地,如下使用SQLite DB浏览器来查看数据。

sqlbrowser

结束语


在这篇博客文章中,我们在Xamarin.Android应用中使用实体框架核心来生成一个数据库,查看实体框架核心文件。你可以在我的GitHub上抓住我的全部源代码来使用实体框架构建Android应用。


目录
相关文章
|
2月前
|
安全 Android开发 iOS开发
Android vs. iOS:构建生态差异与技术较量的深度剖析###
本文深入探讨了Android与iOS两大移动操作系统在构建生态系统上的差异,揭示了它们各自的技术优势及面临的挑战。通过对比分析两者的开放性、用户体验、安全性及市场策略,本文旨在揭示这些差异如何塑造了当今智能手机市场的竞争格局,为开发者和用户提供决策参考。 ###
|
16天前
|
Java Android开发 开发者
探索安卓开发:构建你的第一个“Hello World”应用
在安卓开发的浩瀚海洋中,每个新手都渴望扬帆起航。本文将作为你的指南针,引领你通过创建一个简单的“Hello World”应用,迈出安卓开发的第一步。我们将一起搭建开发环境、了解基本概念,并编写第一行代码。就像印度圣雄甘地所说:“你必须成为你希望在世界上看到的改变。”让我们一起开始这段旅程,成为我们想要见到的开发者吧!
24 0
|
1月前
|
算法 JavaScript Android开发
|
25天前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
2月前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
77 5
|
2月前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
128 1
|
2月前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
51 2
|
2月前
|
开发工具 Android开发 iOS开发
Android vs iOS:构建移动应用时的关键考量####
本文深入探讨了Android与iOS两大移动平台在开发环境、性能优化、用户体验设计及市场策略方面的差异性,旨在为开发者提供决策依据。通过对比分析,揭示两个平台各自的优势与挑战,帮助开发者根据项目需求做出更明智的选择。 ####
|
开发工具 Android开发 iOS开发
使用xamarin开发Android、iOS报错failed to open directory: 系统找不到指定的文件
使用vs2019学习xamarin时,创建新程序。使用模拟器真机等测试都报错如下图错误: ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/5877188/20231030-de8ce5fd.png?x-cos-security-token=r4KyZDEowPT0kGTL0LqE8EnwfN1Nzexadb05dcffed3939ff8d7591c528c01706nvpGSE93QwHpZM8NwhJNTZctNRQa0l3KDhEnqj8P7d8t
126 0
使用xamarin开发Android、iOS报错failed to open directory: 系统找不到指定的文件
|
Java C# Android开发
.NET(WinCE、WM)开发转Android开发 ——Xamarin和Smobiler对比
WinCE从1995年诞生至今,已有20多年的发展历史,行业成熟方案覆盖范围广,从车载、工控、手持机都有涉及,且方案成熟。 近些年,Android以后来居上的态势,逐渐渗透至各行业领域,硬件手持大厂也把产品线重心向Android手持迁移,基于Android的行业解决方案越来越成熟,WinCE的开发人才流失,在WinCE解决方案上吃老本的企业寻求转型。
下一篇
DataWorks