当前位置:   article > 正文

向.NET Core项目添加EntityFrameworkCore支持_using microsoft.entityframeworkcore;

using microsoft.entityframeworkcore;

目录

介绍

创建解决方案和项目

配置数据库和模型

添加迁移和更新数据库

总结

参考


介绍

我每天都在使用EntityFramework,但我不会每天向现有项目添加EntityFrameworkEF)。我必须一次又一次地创建一个新项目或将EntityFramework添加到现有项目中,我决定记录这些步骤。

在本文中,我将展示如何开始使用EntityFramework。我将从一个不支持EntityFramework的项目开始,并将EF支持添加到项目中,并使用迁移来更新数据库。我使用Visual Studio 2017MS SQL ServerSQL Server Management StudioEntityFrameworkCore.NET Core SDK 2.2

GitHub提供了与本文相关的代码。

创建解决方案和项目

我首先在Visual Studio中创建了一个空解决方案,并添加了一个WebAPI项目目标.NET Core 2.2

我正在使用MS SQL Server,因此我正在使用EntityFrameworkNuget包寻找'Microsoft.EntityFrameworkCore.SqlServer'

右键单击该项目,然后单击Manage NuGet Package并选择当前为2.2.6的最新稳定版本。

我将使用代码优先迁移,因此,我也添加了对'Microsoft.EntityFrameworkCore.Design'的引用。

我将更新appsetting.json文件以获取连接字符串。我正在使用我的机器上本地可用的MS SQLServer。我将我的连接命名为'DefaultConnection',并将数据库名称命名为'ApplicationDb'。我将通过添加以下内容来更新appsetting.json文件:

  1. "ConnectionStrings": {
  2. "DefaultConnection": "Server=(localdb)\\mssqllocaldb;
  3. Database=ApplicationDb;Trusted_Connection=True;"
  4. }

配置数据库和模型

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

我要添加三个表,分别是CustomerContactCustomerContact。代码示例显示了另外两个类,IAuditableAuditAudit表的目的是存储在所有表中发生的更改历史记录,并且IAuditable是用于统一Auditable属性的接口。这些是额外的工作,现在可以忽略。有许多Enum用于提供客户数据的类型信息。CustomerContact实体有很多关系,因此我添加了CustomerContact实体来存储关系。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. namespace AutotrackEntityChange.DBContext
  6. {
  7. public class Customer : IAuditable
  8. {
  9. public Guid Id { get; set; }
  10. public String AccountNumber { get; set; }
  11. public String Name { get; set; }
  12. public DateTime? CreatedDate { get; set; }
  13. public DateTime? ModifiedDate { get; set; }
  14. public String LastModifiedBy { get; set; }
  15. public bool IsInactive { get; set; }
  16. public ICollection<CustomerContact> CustomerContacts { get; set; }
  17. }
  18. public class Contact : IAuditable
  19. {
  20. public Guid Id { get; set; }
  21. public String Name { get; set; }
  22. public String Title { get; set; }
  23. public String Phone { get; set; }
  24. public String Email { get; set; }
  25. public ContactTypeEnum ContactType { get; set; }
  26. public String Note { get; set; }
  27. public DateTime? CreatedDate { get; set; }
  28. public DateTime? ModifiedDate { get; set; }
  29. public String LastModifiedBy { get; set; }
  30. public bool IsInactive { get; set; }
  31. public ICollection<CustomerContact> CustomerContacts { get; set; }
  32. }
  33. public class CustomerContact:IAuditable
  34. {
  35. public Guid Id { get; set; }
  36. public DateTime? CreatedDate { get; set; }
  37. public DateTime? ModifiedDate { get; set; }
  38. public string LastModifiedBy { get; set; }
  39. public bool IsInactive { get; set; }
  40. public Guid CustomerId { get; set; }
  41. public Customer Customer { get; set; }
  42. public Guid ContactId { get; set; }
  43. public Contact Contact { get; set; }
  44. }
  45. public class Audit
  46. {
  47. public Guid Id { get; set; }
  48. public Guid? EntityId { get; set; }
  49. public string User { get; set; }
  50. public String Entity { get; set; }
  51. public DateTime DateTime { get; set; }
  52. public string ColumnName { get; set; }
  53. public String OldValue { get; set; }
  54. public String NewValue { get; set; }
  55. public EntityStateChangeTypeEnum ChangeType { get; set; }
  56. }
  57. /// <summary>
  58. /// This interface determines what will be automatically tracked.
  59. /// </summary>
  60. interface IAuditable
  61. {
  62. Guid Id { get; set; }
  63. DateTime? CreatedDate { get; set; }
  64. DateTime? ModifiedDate { get; set; }
  65. String LastModifiedBy { get; set; }
  66. bool IsInactive { get; set; }
  67. }
  68. public enum EntityStateChangeTypeEnum
  69. {
  70. Added,
  71. Deleted,
  72. Modified,
  73. }
  74. public enum ContactTypeEnum
  75. {
  76. Primary,
  77. Secondary,
  78. Emergency,
  79. }
  80. }

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

  1. using Microsoft.EntityFrameworkCore;
  2. namespace AutotrackEntityChange.DBContext
  3. {
  4. public class ApplicationDbContext: DbContext
  5. {
  6. //Define DbSets
  7. public DbSet<Customer> Customers { get; set; }
  8. public DbSet<Contact> Contacts { get; set; }
  9. public DbSet<CustomerContact> CustomerContacts { get; set; }
  10. public DbSet<Audit> Audits { get; set; }
  11. public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
  12. : base(options) {}
  13. }
  14. }

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

  1. services.AddDbContext<ApplicationDbContext>(options =>
  2. options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

添加迁移和更新数据库

通过以上这些更改,我准备使用实体框架创建迁移。Visual Studio的包管理器控制台中,运行以下命令:

Add-Migration InitialCreate

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

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

Update-database

运行上述命令时,它会创建表以及迁移到已配置数据库中定义的任何更新。这时,我可以在ApplicationDb数据库中查看我的SSMS中的那些表。

总结

在本文中,我提供了一种逐步的方法来向.NET Core项目添加EntityFramework Code-First方法。因为我不一定每天都在添加EntityFramework项目,所以这些步骤很难记住,这些步骤需要谨慎执行。我使用了WebAPI项目的示例,但这些步骤同样适用于MVC或库项目。最后,我使用MS SQL Server作为数据库。但根据需要,这些步骤可用于连接其他数据库,只需对配置进行微小更改。我希望这会对某人有所帮助,我欢迎提出意见和建议。

参考

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/253468
推荐阅读
相关标签
  

闽ICP备14008679号