一步一步学Entity FrameWork 4
本人在学习EF4时,读了很多书,走了很多弯路,最后发现其实EF4很简单,结合Linq,可以实现非常简单的添查删改操作。下面以一个实例为例对EF4的使用作一解析,希望大家在此少走弯路。本文采用较为成熟的Database First模式,从数据库生成模型,然后使用T4模板生成POCO类代码,最后使用控制台程序进行调用。
1、数据库准备本文选择的数据库是一个在实际工作中非常常用的数据库, 构造如下:
各个表的结构和数据类型如下:
ProductUnit表:产品单位Products表:产品信息表
ProductBigType:产品大类
ProductSmallType:产品小类
依照上述步骤在Sql Server Management Studio编写完成后,就可以准备进行调用了。
2.准备相关工具相信手边VS已经安装完毕,还要下载Entity Framework 4.x来进行安装,除此以外还需要一个重要的工具:
EF4.x POCO Entity Generator for C#,想要安装这一工具,点击VS的工具菜单下的扩展管理器,,,,在搜索框中搜索POCO字样就可以找到。这个工具实际上是一个T4模板,通过它可以为我们自动生成POCO式的实体类以及对ObjectContext的引用。
3、生成实体的POCO类
1)首先新建一个控制台项目,命名为 ProdouctEFDemo ;
2) 在该项目的根结点上右键单击,在弹出的菜单里选择 添加→新建文件夹 ,新建一个命名为 Models 的文件夹,数据模型将放在这里。
3)在Models文件夹上右键单击,在弹出的菜单里选择 添加→新建项, 在弹出的对话框中选择 ADO.Net实体数据模型, 并将其命名为ProductEFDemo.edmx;单击 添加 按钮继续;
4)选择“从数据库生成”,单击下一步继续;
5)点击新建连接,找到需要生成实体的数据库(这一步就不用演示了吧!)
注意勾选“将App.Config中的实体连接设置另存为”选项,本对话框中的ProductsEntities就是未来实体对象的类名,建议不要更改。观察一下实体连接字符串,哇好复杂,不用管他。操作完成后单击下一步继续:
6)选择全部的表,并注意勾选“在模型中加入外键列”,这一选项是EF4新增的,在实际应用中有很多好处,特别是在构建模型时,单击完成按钮就会在Models文件夹下生成实体数据模型:
注意检查VS的“输出”窗口,是否提示有生成错误等信息,如果有错误,就需要从“错误列表”窗口查看是什么出了错,一一解决。最常见的错误是表没有设置主键列,这会导致在进行数据插入时出现一些莫名其妙的错误,所以有关的检查在这一步都要完成,否则后面出了错很难调试。当然高手也可以通过手工悠edmx文件来解决(这个文件实际上就是一个XML文件),但是既然有可视化编辑器,为什么不让问题消失在萌芽中呢?
7)现在进入最高级的一步:生成实体类。VS默认已经有两个可供使用的实体类生成器,但个人觉得都不是很好用,没有生成POCO类,理解起来也困难。有了前面介绍的EF4.x POCO Entity Generator,问题迎刃而解。在VS中的ProductEFDemo.edmx的设计器界面任意的空白处点击右键,在弹出的菜单中选择“添加代码生成项”,在弹出的对话框选择EF4.x POCO Entity Generator,为其随便起一个名字:
点击添加后,Models文件夹下就出现了两个T4模板,并且同时自动运行T4生成器,为我们生成了所需要的实体POCO代码。你可以花一点时间研究一下这些代码,在这里因为篇幅原因,就不再拷贝代码了:
如果代码没有自动生成,可以在两个T4模板上分别点击左键,在弹出的菜单里选择“运行自定义工具”命令,可以得到同样的效果。
现在大功告成,可以动手进行我们的添查删改操作了。
4、向数据库添加测试数据:
为了简单起见,我们向数据库添加的数据符合这样的规则:如果字符串类型,内容为XX测试数据+序号,如果为decimal类型,内容为随机的double类型数据,如果是时间类型,内容为DateTime.Today;为此我们逐个向数据库添加数据,向数据库里添加数据的原则是:如果是一对多关系,先添加一的部分,再添加多的部分,否则多的部分会因为没有数据可用而引发异常,在本示例里,Product表是多的部分,而ProductUnit是一的部分,所以添加数据的顺序应为ProductUnit→ProductBigType→ProductSmallType→Product:
在项目中再添加一个文件夹,命名为Business,将我们进行添查删改的代码都放在里面,新建一个静态类InsertData,cs:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using ProductEFDemo.Models; namespace ProductEFDemo.Business { public static class InsertData { public static void AddProudctUnit() { for ( int i = 0; i < 10; i++) { var productUnit = new ProductUnit { ProductUnitId=Guid.NewGuid(), ProductUnitName = String.Format( "产品单位测试数据{0}" ,i.ToString()) }; using (var ctx = new ProductsEntities()) { ctx.ProductUnit.AddObject(productUnit); ctx.SaveChanges(); } } } } }
好了,基本的ProductUnit的数据录入问题得到圆满解决。这里对代码作一个解释:
在命名空间务必要添加对ProductEFDemo.Models的引用,因为实体的POCO类,ObjectContext类都在这呢!
然后就可以自由地调用相关的类了,注意这句:
using (var ctx = new ProductsEntities()) { ctx.ProductUnit.AddObject(productUnit); ctx.SaveChanges(); }
适用于所有情况,其中ctx是ObjectContext类的实例,调用AddObject方法就可以将对象加入ObjectContext,然后再调用SaveChanges方法就可以将数据更新到数据库。是不是很简单?
如法泡制:
public static void AddProductBigType() { for ( int i = 0; i < 10; i++) { var productBigType = new ProductBigType { ProductBigTypeId = Guid.NewGuid(), ProductBigTypeName = String.Format( "产品大类测试数据{0}" , i.ToString()) }; using (var ctx = new ProductsEntities()) { ctx.ProductBigType.AddObject(productBigType); ctx.SaveChanges(); } } } public static void AddProductSmallType(Guid productBigTypeId) { for ( int i = 0; i < 10; i++) { var productSmallType = new ProductSmallType { ProductBigTypeId=productBigTypeId, ProductSmallTypeId=Guid.NewGuid(), ProductSmallTypeName = String.Format( "产品小类测试数据{0}" , i.ToString()) }; using (var ctx = new ProductsEntities()) { } } }
当前标签: .Net Framework
【译著】Code First :使用Entity. Framework编程(8) qouoww 2012-01-07 14:52 阅读:2165 评论:6
【译著】Code First :使用Entity. Framework编程(7) qouoww 2012-01-06 20:26 阅读:1013 评论:4
【译著】Code First :使用Entity. Framework编程(6) qouoww 2012-01-05 15:45 阅读:1091 评论:2
【译著】Code First :使用Entity. Framework编程(5) qouoww 2012-01-03 17:36 阅读:1573 评论:2
【译著】Code First :使用Entity. Framework编程(4) qouoww 2012-01-03 11:11 阅读:1326 评论:0
【译著】Code First :使用Entity. Framework编程(3) qouoww 2012-01-01 19:27 阅读:1496 评论:3
【译著】Code First :使用Entity. Framework编程(2) qouoww 2011-12-31 21:22 阅读:2054 评论:9
【译著】Code First :使用Entity. Framework编程(1) qouoww 2011-12-31 19:10 阅读:2573 评论:15
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于一步一步学Entity FrameWork 4的详细内容...