EF-Code First 入门

时间:2023-03-10 01:19:35
EF-Code First 入门

本文程序基于VS2015、EF6.1,本文不做过多深入讨论,只是个入门。

EF 就是微软的 EntityFramework,主要分为 DB First,Model First,Code First。之前也只是简单的用 DB First,后来发现 Code First 才是大势所趋,毕竟对于 Coder 来说代码实现更好点,而且迁移很好用。

首先是程序结构

EF-Code First 入门

一、Models

先弄2个Model,对应于2张表的结构

 public class UserModel
     {
         public int Id { get; set; }
         public string Name { get; set; }
         public int Age { get; set; }
         public virtual ICollection<ProductModel> Products { get; set; }
     }
 public class ProductModel
     {
         public int Id { get; set; }
         public string Name { get; set; }
     }

二、Mapping

这里主要是设置每个字段的一些限制,比如是否可为空,外键关系啊等等,有些人喜欢写在 Context 的 OnModelCreating 里,但是我还是喜欢单独写成 Mapping 里,这样更清晰一些

 public class UserModelMap : EntityTypeConfiguration<UserModel>
     {
         public UserModelMap()
         {
             //this.ToTable("dbo.User");
             this.HasKey(u => u.Id);

             this.Property(u => u.Name).IsRequired();
             this.HasMany(u => u.Products);
         }
     }
 public class ProductModelMap : EntityTypeConfiguration<ProductModel>
     {
         public ProductModelMap()
         {
             this.HasKey(p => p.Id);

             this.Property(p => p.Name).IsRequired();
         }
     }

三、Context

先在 App.config 里添加一个连接字符串,请注意正常的 SqlServer 和 LocalDB 连接字符串不一样

<connectionStrings>

<add name="EFCodeFirst"connectionString="Server=.;Database=EFCodeFirst;Integrated Security=SSPI"providerName="System.Data.SqlClient"/>

</connectionStrings>

创建一个 Context

 public class EFContext : DbContext
     {
         public DbSet<UserModel> Users { get; set; }

         public DbSet<ProductModel> Products { get; set; }

         public EFContext()
             : base("name=EFCodeFirst")
         {

         }

         protected override void OnModelCreating(DbModelBuilder modelBuilder)
         {
             base.OnModelCreating(modelBuilder);
             //modelBuilder.Entity<UserModel>()

             modelBuilder.Configurations.Add(new UserModelMap());
             modelBuilder.Configurations.Add(new ProductModelMap());
         }
     }

四、创建

运行后就可以创建一个数据库了

EF-Code First 入门

五、迁移

开发过程中总是会改数据库的,所以就需要用到迁移

在 Package Manager Console 中执行 Enable-Migrations,然后目录中就会出现 Migrations 文件夹了

每次执行迁移时都会生成一个文件,可以用来恢复,这样也有个记录,我觉得这点还是很强大的

六、常用的命令

从网上找到的,不全

安装EF

PM> Install-Package EntityFramework  Or  NuGet

启用Migrations

PM> Enable-Migrations -EnableAutomaticMigrations

添加Migration

PM> Add-Migration InitialCreate(名字)

更新

PM> Update-Database -Verbose

获取指定版本

PM> Update-Database –TargetMigration:"201606220937315_InitialCreate.cs"(名字)