在.NET Core项目中添加EntityFramework支持

在开发过程中,并不总是需要在现有项目中添加EntityFramework (EF)。但每当需要创建新项目或在现有项目中添加EF支持时,决定记录下这些步骤。本文将展示如何开始使用EntityFramework。将从一个不支持EntityFramework的项目开始,并添加EF支持到项目中,并使用迁移来更新数据库。使用的是Visual Studio 2017,MSSQL Server与SQL Server Management Studio以及EntityFrameworkCore与.NET CoreSDK 2.2。

创建解决方案和项目

首先,在Visual Studio中创建一个空的解决方案,并添加一个针对.NET Core2.2的WebAPI项目。使用的是MSSQL Server,因此正在寻找名为'Microsoft.EntityFrameworkCore.SqlServer'的Nuget包。右键单击项目,然后单击'管理NuGet包'并选择当前最新的稳定版本,即2.2.6。

将使用代码优先迁移,因此,还将添加对'Microsoft.EntityFrameworkCore.Design'的引用。将更新appsetting.json文件以添加连接字符串。使用的是本地机器上可用的MS SQLServer。将连接命名为'DefaultConnection',数据库名称为'ApplicationDb'。将通过添加以下内容来更新appsetting.json文件:

"ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=ApplicationDb;Trusted_Connection=True;" }

配置数据库和模型

将组织与Entity Framework相关的代码到一个单独的文件夹中。因此,在项目中添加了一个名为'DBContext'的文件夹。接下来,将使用代码优先方法添加数据库中的表。

将添加三个表,分别是Customer、Contact和CustomerContact。代码示例显示了两个额外的类,IAuditable和Audit。Audit表的目的是存储所有表中发生的变更历史,而IAuditable是一个接口,用于统一Auditable属性。这些是额外的工作,目前可以忽略。还有一些枚举,用于为客户数据提供类型信息。

Customer和Contact实体具有多对多的关系,因此添加了CustomerContact实体来存储关系。

using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace AutotrackEntityChange.DBContext { public class Customer : IAuditable { public Guid Id { get; set; } public String AccountNumber { get; set; } public String Name { get; set; } public DateTime? CreatedDate { get; set; } public DateTime? ModifiedDate { get; set; } public String LastModifiedBy { get; set; } public bool IsInactive { get; set; } public ICollection CustomerContacts { get; set; } } public class Contact : IAuditable { public Guid Id { get; set; } public String Name { get; set; } public String Title { get; set; } public String Phone { get; set; } public String Email { get; set; } public ContactTypeEnum ContactType { get; set; } public String Note { get; set; } public DateTime? CreatedDate { get; set; } public DateTime? ModifiedDate { get; set; } public String LastModifiedBy { get; set; } public bool IsInactive { get; set; } public ICollection CustomerContacts { get; set; } } public class CustomerContact:IAuditable { public Guid Id { get; set; } public DateTime? CreatedDate { get; set; } public DateTime? ModifiedDate { get; set; } public string LastModifiedBy { get; set; } public bool IsInactive { get; set; } public Guid CustomerId { get; set; } public Customer Customer { get; set; } public Guid ContactId { get; set; } public Contact Contact { get; set; } } public class Audit { public Guid Id { get; set; } public Guid? EntityId { get; set; } public string User { get; set; } public String Entity { get; set; } public DateTime DateTime { get; set; } public string ColumnName { get; set; } public String OldValue { get; set; } public String NewValue { get; set; } public EntityStateChangeTypeEnum ChangeType { get; set; } } interface IAuditable { Guid Id { get; set; } DateTime? CreatedDate { get; set; } DateTime? ModifiedDate { get; set; } String LastModifiedBy { get; set; } bool IsInactive { get; set; } } public enum EntityStateChangeTypeEnum { Added, Deleted, Modified, } public enum ContactTypeEnum { Primary, Secondary, Emergency, } }

有了这些,就可以继续添加模型了。创建了一个名为ApplicationDbContext的类,该类派生自DbContext以配置EntityFramework。在这个类中,首先定义了所有三个表作为DbSet,并添加了一个public构造函数,将DbContext连接到数据库。

using Microsoft.EntityFrameworkCore; namespace AutotrackEntityChange.DBContext { public class ApplicationDbContext: DbContext { public DbSet Customers { get; set; } public DbSet Contacts { get; set; } public DbSet CustomerContacts { get; set; } public DbSet Audits { get; set; } public ApplicationDbContext(DbContextOptions options) : base(options) {} } }

由于使用的是SQLServer,在startup类中的ConfigureServices中添加了sqlserver选项,引用了上面创建的ApplicationDbContext。

services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

添加迁移并更新数据库

有了上述更改,准备使用Entity Framework创建迁移。在Visual Studio的包管理器控制台中,运行以下命令:

Add-Migration InitialCreate

命令运行后,迁移已被创建。这将在解决方案资源管理器中显示。迁移文件夹包含迁移文件和设计文件。这些内容可以在代码库中查看。简而言之,迁移是数据库的指令,在本例中,是创建表和关系。

现在迁移已经添加,可以更新数据库,以便应用迁移。为此,在包管理器控制台中运行以下命令:

Update-database
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485