首页 > 代码库 > EntityFramewrok Codefirst 数据库初始化
EntityFramewrok Codefirst 数据库初始化
我们希望当程序运行时自动完成数据库的创建并预置初始值。自己的Context名为 DataBaseContet
有两种方法:
1、在Global.asax中添加 Database.SetInitializer<DataBaseContext>(new DatabaseInitializer());
2、配置文件中添加 contexts 节点, 节点中指定类名与命名空间
<entityFramework> <contexts> <context type="DataBase.DataBaseContext, DataBase" disableDatabaseInitialization="false"> <databaseInitializer type="DataBase.DatabaseInitializer, DataBase" /> </context> </contexts> <defaultConnectionFactory type="DataBase.DataBaseContext, DataBase"> <parameters> <parameter value=http://www.mamicode.com/"v11.0" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>
其中 DataBaseContext为:
namespace DataBase{ public class DataBaseContext : DbContext { public DataBaseContext() : base("default") { //是否启用延迟加载: // true: 延迟加载(Lazy Loading):获取实体时不会加载其导航属性,一旦用到导航属性就会自动加载 // false: 直接加载(Eager loading):通过 Include 之类的方法显示加载导航属性,获取实体时会即时加载通过 Include 指定的导航属性 this.Configuration.LazyLoadingEnabled = true; this.Configuration.AutoDetectChangesEnabled = true; //自动监测变化,默认值为 true } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } public DbSet<UserModels> UserContext { get; set; } public DbSet<PigModels> PigContext { get; set; } }}
自定义的数据初始化方法:DatabaseInitializer,其中继承的是DropCreateDatabaseAlways 只为演示用, 实际项目中根据需要选择。
namespace DataBase{ public class DatabaseInitializer : DropCreateDatabaseAlways<DataBaseContext> { protected override void Seed(DataBaseContext context) { UserModels m1 = new UserModels() { UserGUID = Guid.NewGuid().ToString(), UserName = "张一", UserNumber = "0001", UserBirthDay = "1990.1.1", UserMail = "aaa@qq.com", UserPhone = "13100001111", Password="aaaaaa" }; UserModels m2 = new UserModels() { UserGUID = Guid.NewGuid().ToString(), UserName = "张二", UserNumber = "0002", UserBirthDay = "1989.12.12", UserMail = "bbb@qq.com", UserPhone = "13100002222", Password = "aaaaaa" }; UserModels m3 = new UserModels() { UserGUID = Guid.NewGuid().ToString(), UserName = "张三", UserNumber = "0003", UserBirthDay = "1989.12.12", UserMail = "ccc@qq.com", UserPhone = "13100003333", Password = "aaaaaa" }; try { // 写数据库 context.UserContext.Add(m1); context.UserContext.Add(m2); context.UserContext.Add(m3); context.SaveChanges(); } catch (DbEntityValidationException dbEx) { } base.Seed(context); } }}
具体步骤:
首先通过NuGet工具安装EntityFramework,本人用的为6.0版本。
1、建立实体类:
namespace DatabaseModels{ public class UserModels { [Required] [Key] public string UserGUID { get; set; } [Required] [Display(Name = "用户名")] public string UserName { get; set; } [Display(Name = "用户工号")] public string UserNumber { get; set; } [Required] [DataType(DataType.Password)] [Display(Name = "密码")] public string Password { get; set; } [Display(Name = "出生日期")] public string UserBirthDay { get; set; } [Display(Name = "电话号")] public string UserPhone { get; set; } [Display(Name = "邮箱")] public string UserMail { get; set; } }}
2、建立Context 继承 DbContext
namespace DataBase{ public class DataBaseContext : DbContext { public DataBaseContext() : base("default") { //是否启用延迟加载: // true: 延迟加载(Lazy Loading):获取实体时不会加载其导航属性,一旦用到导航属性就会自动加载 // false: 直接加载(Eager loading):通过 Include 之类的方法显示加载导航属性,获取实体时会即时加载通过 Include 指定的导航属性 this.Configuration.LazyLoadingEnabled = true; this.Configuration.AutoDetectChangesEnabled = true; //自动监测变化,默认值为 true } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } public DbSet<UserModels> UserContext { get; set; } }}
3、创建数据初始方法
namespace DataBase{ public class DatabaseInitializer : DropCreateDatabaseAlways<DataBaseContext> { protected override void Seed(DataBaseContext context) { UserModels m1 = new UserModels() { UserGUID = Guid.NewGuid().ToString(), UserName = "张一", UserNumber = "0001", UserBirthDay = "1990.1.1", UserMail = "aaa@qq.com", UserPhone = "13100001111", Password="aaaaaa" }; UserModels m2 = new UserModels() { UserGUID = Guid.NewGuid().ToString(), UserName = "张二", UserNumber = "0002", UserBirthDay = "1989.12.12", UserMail = "bbb@qq.com", UserPhone = "13100002222", Password = "aaaaaa" }; UserModels m3 = new UserModels() { UserGUID = Guid.NewGuid().ToString(), UserName = "张三", UserNumber = "0003", UserBirthDay = "1989.12.12", UserMail = "ccc@qq.com", UserPhone = "13100003333", Password = "aaaaaa" }; try { // 写数据库 context.UserContext.Add(m1); context.UserContext.Add(m2); context.UserContext.Add(m3); context.SaveChanges(); } catch (DbEntityValidationException dbEx) { } base.Seed(context); } }}
4、
方法一、在Global.asax中 添加 Database.SetInitializer<DataBaseContext>(new DatabaseInitializer());
或者:方法二:在配置文件中添加节点:
<contexts> <context type="DataBase.DataBaseContext, DataBase" disableDatabaseInitialization="false"> <databaseInitializer type="DataBase.DatabaseInitializer, DataBase" /> </context> </contexts>
EntityFramewrok Codefirst 数据库初始化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。