您的位置:首页 > 数据库

一步一步教你使用CodeFisrt

2017-10-12 15:21 423 查看

第一步,添加EF引用

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

Install-Package 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源码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐