EntityFramework Codefirst 数据库初始化
2014-09-12 16:09
281 查看
我们希望当程序运行时自动完成数据库的创建并预置初始值。自己的Context名为 DataBaseContet
有两种方法:
1、在Global.asax中添加 Database.SetInitializer<DataBaseContext>(new DatabaseInitializer());
2、配置文件中添加 contexts 节点, 节点中指定类名与命名空间
其中 DataBaseContext为:
自定义的数据初始化方法:DatabaseInitializer,其中继承的是DropCreateDatabaseAlways 只为演示用, 实际项目中根据需要选择。
具体步骤:
首先通过NuGet工具安装EntityFramework,本人用的为6.0版本。
1、建立实体类:
2、建立Context 继承 DbContext
3、创建数据初始方法
4、
方法一、在Global.asax中 添加 Database.SetInitializer<DataBaseContext>(new DatabaseInitializer());
或者:方法二:在配置文件中添加节点:
有两种方法:
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="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>
相关文章推荐
- Entity FrameWork Code First 之 MVC4 数据库初始化策略用法
- Entity Framework Code First 迁移数据库
- Entity Framework Code First数据库迁移(DB Migration)
- EntityFrameWork Code First 多数据库以及自定义字符串的使用+连接字符串加密调用
- Entity Framework code first 手动修改数据库的问题
- Entity FrameWork Code First无法生成数据库 解决办法
- entity framework codefirst 用户代码未处理DataException,InnerException基础提供程序在open上失败,数据库生成失败
- Entity Framework Code First数据库连接
- Entity Framework Code First数据库连接
- Entity Framework code first 手动修改数据库的问题
- 数据库视图 (View)和EntityFramework Code First结合使用
- Programming Entity Framework CodeFirst--数据库约定和配置
- 代码生成数据库及更新数据库:Entity Framework first code(http://www.cnblogs.com/haogj/archive/2012/02/17/2356537.ht
- Entity Framework Code First数据库连接
- Entity Framework CodeFirst------使用CodeFirst方式建立数据库连接(一)
- EntityFramework Code-First 简易教程(十一)-------从已存在的数据库中映射出表
- EntityFramework Code First 手写代码实现生成数据库
- Entity Framework code first设置不在数据库中生成外键
- Entity Framework Code First 学习日记(10)-兼容遗留数据库
- Entity Framework Code First 多数据库 控制台迁移代码