一步一步教你使用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源码
相关文章推荐
- 使用eclipse和maven一步一步配置web项目
- 一步一步入门机器学习之一:Python(x,y)下载,安装,使用入门
- 利用 Composer 一步一步构建自己的 PHP 框架(四)——使用 ORM
- 一步一步教你在eclipse下使用maven搭建模块化的SSH框架
- 一步一步SharePoint 2007之十八:解决允许使用简单密码注册用户的问题
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之数据篇
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建项目
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-使用UDA操纵SQL语句
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-演示使用报表构建UI-入库业务查询模块
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建Viewport(1)
- 一步一步学Silverlight 2系列(10):使用用户控件
- 一步一步SharePoint 2007之十八:解决允许使用简单密码注册用户的问题
- 使用maven一步一步构建spring mvc项目
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之预告篇
- 一步一步使用Monkeyrunner实现Android的自动化测试
- 一步一步使用ABP框架搭建正式项目系列教程
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-类库介绍
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇阶段总结与WinForm篇展望
- 一步一步使用POI做java报表
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-UDA中处理事务