EF4.1之基础(实现Code First)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > EF4.1之基础(实现Code First)

EF4.1之基础(实现Code First)

 2013/11/12 14:45:19  小小gogo  博客园  我要评论(0)
  • 摘要:CodeFirst:顾名思义:就是通过代码生成数据库----通过类生成数据库中对应的表:首先定义两个类(就是建模的过程):1publicclassOrder2{3publicintOrderId{set;get;}45publicstringOrderCode{set;get;}67publicstringCustormName{set;get;}89publicICollection<OrderDetail>OrderDetails{set;get;}10
  • 标签:实现

Code First:顾名思义:就是通过代码生成数据库----通过类生成数据库中对应的表:

首先定义两个类(就是建模的过程):

 1     public class Order
 2     {
 3         public int OrderId { set; get; }
 4         
 5         public string OrderCode { set; get; }
 6         
 7         public string CustormName { set; get; }
 8 
 9         public ICollection<OrderDetail> OrderDetails { set; get; }
10       }
1     public class OrderDetail
2     {
3         public int OrderDetailID{set;get;}
4         public int OrderId { set; get; }
5         public decimal Cost { set; get; }
6         public Order Order { set; get; }
7     }

 

主要通过 DbContext实现的,所以要定义一个继承DbContext的基类

    public class DbEntities:DbContext
    {
        //对应实体的 两个类,生成对应的数据库中的表
        public DbSet<Order> Orders { set; get; }//set/get:代表是可读写的
        public DbSet<OrderDetail> OrderDetails { set; get; }

        static DbEntities()
        {
            Database.SetInitializer<DbEntities>(new DropCreateDatabaseIfModelChanges<DbEntities>());//如果没有这条语句,那么模型和 数据库架构不同时 就会报错
         }
 
      }

重要讲解的是这个静态构造函数:相当于对于整个应用程序域建立了一个标准,当初始化 DbContext的时候就会通过调用Database 的初始化的方法 SetInitiallizer方法进行检查现在的模型和数据库的架构是否相同,如果不相同 就通过参数

new DropCreateDatabaseIfModelChanges<DbEntities>() 删除数据库然后新建。

这时可能大家就会问了,内部是通过什么进行检查模型和数据库的架构是否相同的呢?

如果大家注意的话,就会发现,当我们生成数据库的时候会发现,生成我们定义的数据库表的同时页生成了一个 名字为EdmMetadata,而且他的里面一面只有两个一个字段(一个是Id,另一个就是Modelhash),这个Modelhash很重要:是通过模型生成的对应的hash值,当初始化的时候就会 先对当前模型生成对应的 hash 然后和这个字段进行比对,如果相同就不删除重建,如果不同就删除重建。


 

 

发表评论
用户名: 匿名