Entity Framework Code First 的用途 和 原理 -摘自网络
2013-03-05 14:14
211 查看
在最近发布的EF4.1中包含支持使用代码优先(Code First)的方式进行EF开发。目前实体框架已经支持三种方式:数据库优先、模型优先,以及代码优先。然而,代码优先并不是总是意味着先写代码,这一点有点让人迷惑不解。
数据库优先
数据库优先背后的意思是,你的项目已经有一个数据库,并且使用工具(如Visual Studio中的EF设计器)依据数据库生成C#或VB类。你可以通过EF设计器修改这些创建的类以及类和数据库之间的映射关系;天、如果你觉得自己很勇 敢,你甚至可以直接修改XML。这种方式的关键是先要有数据,然后才有代码和模型。
模型优先模型
优先背后的意思是,通过在EF设计器中创建一个空的容器,在其中设计实体数据模型。这个模型将用于生成数据库以及C#或者VB类。这种方式的关键是先要有模型,然后才有数据库和代码。
代码优先生成数据库
代码优先最原始的原型实际上被叫做只有代码(Code Only)。这是因为开发者只需要写代码,将会自动创建模型和数据库。 这种方式会被视为模型优先的方式,这取决于你如何看待模型。在上边的模型优先的介绍中提到模型是通过在EF设计器中进行设计,但是很多开发者会通过代码为 他们的应用领域制作模型。通过代码来实现领域模型的方式通常会与领域驱动设计(Domain Driven Design)关联起来,在这种情况下,可以把代码优先视为模型优先的方式。
使用代码优先的方式生成数据库是一种强大的方式,并且很多人也正在使用,但是这种方式并不是适合所有情况的。
代码优先和已经存在的数据库
想象一下你已经有一个数据库,并且你的数据库管理员不允许你修改数据库,这个时候还能使用代码优先吗?当然可以,很多人已经在用了。而且这不是一个事后的想法,代码优先已经专门为这种情况设计,步骤很简单:
1、 为DbContext配置已经存在的数据库,最简单的方法就是在config文件中添加数据连接配置,并且设置数据连接的名称为你继承自DbContext的类的名称。
2、 创建类映射到你的数据库
3、 使用数据注解或者fluent API为模型类指定正确的到数据库的映射 这种方式实际上是一种数据库优先的方式,只不过我们使用代码映射,代替VS设计器和XML。
Code First != DbContext
DbContext不仅可以用于代码优先方式,也可以用于数据库优先和模型优先。参考:/article/5028375.html
但是通过上述数据库生成继承DbContext的方式并不是Code First,会在运行时加载edmx文件。所以要删除edmx,修改config文件中edmx的数据连接字符串,以及修改部分方法和model类。这个生成模板只不过节省了我们自己写代码的时间。
而且代码优先也可以使用ObjectContext代替DbContext,当然不推荐这样做。
那么代码优先适合我吗?
这取决于你喜欢怎么样创建你的C#或者VB类,以及在类与数据库之间的映射。
如果你使用代码创建这些,则代码优先适合你;
如果喜欢用VS设计器或者XML,那么数据库优先或者模型优先更适合你,特别是你的数据库已经存在,并且数据库管理员不想让你再去动它。
数据库优先
数据库优先背后的意思是,你的项目已经有一个数据库,并且使用工具(如Visual Studio中的EF设计器)依据数据库生成C#或VB类。你可以通过EF设计器修改这些创建的类以及类和数据库之间的映射关系;天、如果你觉得自己很勇 敢,你甚至可以直接修改XML。这种方式的关键是先要有数据,然后才有代码和模型。
模型优先模型
优先背后的意思是,通过在EF设计器中创建一个空的容器,在其中设计实体数据模型。这个模型将用于生成数据库以及C#或者VB类。这种方式的关键是先要有模型,然后才有数据库和代码。
代码优先生成数据库
代码优先最原始的原型实际上被叫做只有代码(Code Only)。这是因为开发者只需要写代码,将会自动创建模型和数据库。 这种方式会被视为模型优先的方式,这取决于你如何看待模型。在上边的模型优先的介绍中提到模型是通过在EF设计器中进行设计,但是很多开发者会通过代码为 他们的应用领域制作模型。通过代码来实现领域模型的方式通常会与领域驱动设计(Domain Driven Design)关联起来,在这种情况下,可以把代码优先视为模型优先的方式。
使用代码优先的方式生成数据库是一种强大的方式,并且很多人也正在使用,但是这种方式并不是适合所有情况的。
代码优先和已经存在的数据库
想象一下你已经有一个数据库,并且你的数据库管理员不允许你修改数据库,这个时候还能使用代码优先吗?当然可以,很多人已经在用了。而且这不是一个事后的想法,代码优先已经专门为这种情况设计,步骤很简单:
1、 为DbContext配置已经存在的数据库,最简单的方法就是在config文件中添加数据连接配置,并且设置数据连接的名称为你继承自DbContext的类的名称。
2、 创建类映射到你的数据库
3、 使用数据注解或者fluent API为模型类指定正确的到数据库的映射 这种方式实际上是一种数据库优先的方式,只不过我们使用代码映射,代替VS设计器和XML。
Code First != DbContext
DbContext不仅可以用于代码优先方式,也可以用于数据库优先和模型优先。参考:/article/5028375.html
但是通过上述数据库生成继承DbContext的方式并不是Code First,会在运行时加载edmx文件。所以要删除edmx,修改config文件中edmx的数据连接字符串,以及修改部分方法和model类。这个生成模板只不过节省了我们自己写代码的时间。
而且代码优先也可以使用ObjectContext代替DbContext,当然不推荐这样做。
那么代码优先适合我吗?
这取决于你喜欢怎么样创建你的C#或者VB类,以及在类与数据库之间的映射。
如果你使用代码创建这些,则代码优先适合你;
如果喜欢用VS设计器或者XML,那么数据库优先或者模型优先更适合你,特别是你的数据库已经存在,并且数据库管理员不想让你再去动它。
相关文章推荐
- MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN -摘自网络
- 例程创建及原理 (摘自网络博客)
- SQL Server 2008数据库镜像+故障转移集群原理-摘自网络
- 神经网络反向传播的数学原理
- 利用DHT网络原理制作bt采集蜘蛛,开源版
- 20145336 张子扬 《网络对抗技术》免杀原理与实践
- 网络原理,以及对VMware Workstation虚拟网络VMnet0、VMnet1、VMnet8的图解
- [转载]网络原理,以及对VM虚拟网络VMnet0、VMnet1、VMnet8的图解
- 摘自网络)如何在IIS中调试ISAPI和COM组件
- 网络原理的一点小知识
- manifest原理和用途
- 小点滴——网站视频下载——摘自网络
- Linux 网络协议栈开发(四)—— 二层桥实现原理
- 摘自网络的一些HTML字体
- 计算机网络原理知识点(第一章:概述)
- IRC僵尸网络原理
- 【摘自百度文库】数据库水平切分的实现原理解析
- Code::Blocks快捷键大全(附汉化教程及其文件) 摘自网络
- 【转】世界海底光缆分布图(摘自阮一峰的网络日志)