EntityFramework(EF)
刚刚开始学习EntityFramework。
看到一篇文章,感觉不错,这是原始链接http://www.cnblogs.com/mecity/archive/2011/07/07/2099598.html#!comments
以下是个人整理后的文章
EDM文件
EDM是实体数据关系映射的XML文件,不同于Nhibernate每个对象单独映射一个XML文件。
三部分:
CSDL:表示实体数据模型结构
SSDL:表示对应的数据存储的架构
MSL: CSDL实体与SSDL数据结构的关系通过MSL映射实现。
生成方式:
通过ADO.NET实体数据模型生成
1.基于数据库(DataBase First)
2.创建空EDM模型(Model First)
基于EDM模型生成代码的方式
1.ADO.NET实体数据模型 最初EF的方式,实体模型EntityObeject与ObjectContext耦合在一起,不适合分层使用
2.ADO.NET自跟踪实体生成器 分离生成基于POCO的SelfTrackingEntityObject模型和ObjectContext(这种方式即使设置了延迟加载,也无法加载关联导航属性,要在使用时手动加载)
3.ADO.NET DbContext Generator 分离生成纯POCO模型和轻型DbContext。DbContext较之ObjectContext比较简洁,且POCO可以充分利用。
现在我们所用的就是第三种。
EF框架有三种开发模式:
1. DataBase First(数据库优先)
2. Model First(模型优先)
3. Code First(代码优先)
DataBase First
传统的表驱动方式创建edm,然后通过edm生成模型和数据层代码。除生成实体模型和自跟踪实现模型,还支持生成纯POCO模型和轻型DbContext。
在设计器中逆向生成Model,并有Model自动生成所有类。
Model First
先创建EDM模型,再生成DDL数据库脚本和模型、数据层代码。除生成实体模型和自跟踪实体模型,支持生成POCO模型和轻型DbContext。
在设计器中创建Model,并用Model生成数据库。所有的类由Model自动生成。
Code First
手动创建POCO模型,数据层DbContext及映射关系,通过DataBase.SetInitializer生成数据库,方式灵活,但代码工作较多。
CodeFirst也可以分为两种
Code First(New DataBase): 在代码中定义类和映射关系并通过model生成数据,使用迁移技术更新数据库。
Code First(Existing DataBase): 在代码中定义类和映射关系,给逆向工程提供工具