简单的EF codefirst
Posted johnyong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的EF codefirst相关的知识,希望对你有一定的参考价值。
废话不多说,直接上图上代码
1、创建模型
2、优化数据库访问上下文
1 public class NewPlatformContext : DbContext 2 { 3 public NewPlatformContext() 4 : base("name=NewPlatform") 5 { 6 Database.SetInitializer<NewPlatformContext>(new DropCreateDatabaseIfModelChanges<NewPlatformContext>()); //当实体发生变化时重新创建数据表 7 8 //Database.SetInitializer<NewPlatformContext>(new CreateDatabaseIfNotExists<NewPlatformContext>()); //数据库不存在时重新创建数据表 9 10 //Database.SetInitializer<NewPlatformContext>(new DropCreateDatabaseAlways<NewPlatformContext>()); //每次启动应用程序时创建数据表 11 12 //Database.SetInitializer<NewPlatformContext>(null); //从不创建数据库(系统固定后,不要再重新创建表,不然之前的数据将丢失。) 13 } 14 protected override void OnModelCreating(DbModelBuilder modelBuilder) 15 { 16 modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); //去除表名中的复数 17 //TODO给关联表加约束 18 } 19 public virtual DbSet<Account> Account{ get; set; } 20 } 21 22 public class Account 23 { 24 [Key] 25 [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 26 public int Id { get; set; } 27 public string Name { get; set; } 28 public string Password { get; set; } 29 } 30 public class SeedingDataInitializer : DropCreateDatabaseAlways<NewPlatformContext> 31 { 32 protected override void Seed(NewPlatformContext context) 33 { 34 //TODO初始化信息 35 Account account = new Account() { 36 Name="Admin", 37 Password="123456", 38 }; 39 context.Account.Add(accout); 40 41 base.Seed(context); 42 } 43 }
最后,
自己不喜欢使用CodeFirst方式进行开发。
1、需要主动声明表public virtual DbSet<Account> Account{ get; set; },很难实现通用的数据库访问基类,在通过泛型的形式由具体数据表对应类进行操作
;
2、数据库的初始化,以及数据的变动应该是人为的主动修改数据库,而不是程序运行时自动创建(个人感觉),特别是开发的时候经常有人把数据库给重建了..其他开发人员就懵了 ;
3、表约束在程序中添加,也觉得不合时宜
当然存在即是理由,听说老外们主张codefirst,把业务逻辑理清晰,数据库就有了!
以上是关于简单的EF codefirst的主要内容,如果未能解决你的问题,请参考以下文章