一步一步教你使用CodeFisrt

第一步,添加EF引用

首先在项目中安装Entity Framework的NuGet包

Install-Package EntityFramework

图示:

EntityFramework包安装

第二步,添加实体类

以下实体代码中 [Table("")] 有点多余,英文生成的数据库中会自动为表名加上 s 后缀

User实体类:

[Table("Users")]
public class User
{
    public Guid Id { get; set; }

    [StringLength(12,MinimumLength =2)]
    [DisplayName("名字")]
    public string Name { get; set; }

    public short Age { get; set; }

    public DateTime Birthday { get; set; }

    [DisplayName("注册日期")]
    public DateTime RegDate { get; set; }

    [DisplayName("修改日期")]
    public DateTime ModifyDate { get; set; }
}

BindAccount实体类

 [Table("BindAccounts")]
 public class BindAccount
 {
     public int Id { get; set; }
     public string Type { get; set; }
 }

Province实体类

 public class Province
 {
     public int Id { get; set; }
     public string Name { get; set; }
 }

第三步,创建数据库上下文,并配置数据库连接字符串

新建Context类,继承自System.Data.Entity.DbContext

 public class Context : DbContext
 {
     public Context() : base("name=DemoConn")
     {

     }
     public DbSet<User> User { get; set; }
     public DbSet<Province> Province { get; set; }
     public DbSet<BindAccount> BindAccount { get; set; }
 }

配置:

<connectionStrings>
  <add name="DemoConn" connectionString="server=.;database=Demo;uid=your account;password=your passsword;MultipleActiveResultSets=true" providerName="System.Data.SqlClient" />
</connectionStrings>

第四步,添加数据库迁移

打开包管理控制台,输入 enable-migrations,然后会自动生成一个文件夹:Migrations,然后继续输入:update-database,会出现以下警告信息:

这里写图片描述

此时,此时只需要将自动生成的 Migrations\Configuration.cs 中设置AutomaticMigrationsEnabled=true,如下:

这里写图片描述

继续在控制台中输入命令:update-database

如下,已成功执行:

这里写图片描述

此时,生成的数据库和项目结构如下所示:

数据库:

这里写图片描述

项目结构:

这里写图片描述

第五步,播种数据

创建数据库初始化器类:SeedingDataInitializer,使用DropCreateDatabaseAlways数据库初始化策略,代码如下:

public class SeedingDataInitializer : DropCreateDatabaseAlways<Context>
{
    protected override void Seed(Context context)
    {
        for (int i = 0; i < 5; i++)
        {
            var province = new Province { Name = $"测试省份{i + 1}" };
            context.Province.Add(province);
        }
        base.Seed(context);
    }
}

修改数据库上下文 Database.SetInitializer<Context>(new SeedingDataInitializer());

public class Context : DbContext
{
    public Context() : base("name=DemoConn")
    {
        Database.SetInitializer<Context>(new SeedingDataInitializer());
    }
}

最后在控制台程序的Main方法中,输出结果,代码如下:

class Program
{
    static void Main(string[] args)
    {
        using (var db = new Context())
        {
            var province = db.Province;
            foreach (var p in province)
            {
                Console.WriteLine($"Id: {p.Id} \t Name{p.Name}");
            }
        }
        Console.WriteLine("数据播种完成");
        Console.ReadLine();
    }
}

结果图示:

这里写图片描述

这里写图片描述

一个问题:为什么使用数据库迁移?

如下,我们Province表中产生5条测试数据,假如我们在开发过程中,添加了一条数据,如下:

这里写图片描述

目前我们使用策略:DropCreateDatabaseAlways,当我们重新运行程序,发现新增的ID=6的这条记录没了:

这里写图片描述

但这不是我们想要的结果,我们的期望是保留这条测试数据,我们该怎么做?
这个时候我们就需要数据库迁移了(使用数据库迁移的话就不要使用初始化器了),我们再次手工插入两条记录:

这里写图片描述

然后在包管理控制台中输入命令:add-migration AddTestDataMigration(你自定义的名称),然后在做更新操作:update-database

这里写图片描述

在Migrations中也自动生成了一些迁移相关的文件:

这里写图片描述

附: Github源码

猜你喜欢

转载自blog.csdn.net/zhaobw831/article/details/78215330