Entity Framework学习笔记(一)
请注明转载地址:http://www.cnblogs.com/arhat
哈哈!老魏回来了,4月份的内容开始更新了,由于3月份时间都在做项目,没有时间写了,那么4月份老魏会尽可能的多写点东西的。那么4月份的内容主要是EF和Linq了。至于NHibernate没有更新完,后面有时间的话老魏会更新的。
一、EF简介
EF的全称是Entity Framework,是微软推出的一款ORM框架,和Nhibernate的作用是一样的,但是出自微软之手那么肯定在兼容性上要非常的到家。虽然EF是个迟来的产品,但是他的特性非常的好,比起NHibernate简直是简化太多了,比如我们不用在写那些映射文件了。好了,废话一堆了,开始介绍一下怎么使用EF吧。
至于EF的知识,老魏在后面将会补上,因为老魏不是很新欢edmx文件把映射文件,实体文件都放在一起,这样不利于分层的设计的。
今天主要把老魏分离EF的心得写出来,否则后面就要忘了!(汗,人老了!)
二、EF分离环境的搭建
这里呢,老魏使用的是MySql数据库,至于为什么不用SQL Server呢,主要是老魏的本本伤不起啊!所以老魏在学习EF的时候走了很多弯路啊!
首先我们建立一个”Com.ArHat.EF”的解决方案,同时在解决方案中建立4个项目:
1,Com.ArHat.DAL(类库)
2,Com.ArHat.BLL(类库)
3,Com.ArHat.Model(类库)
4,Com.ArHat.Test(控制台应用程序)
并添加他们之间的相互引用(小孩子都会了)。
然后,我们需要在Com.ArHat.Model添加一个edmx文件,也就是“ADO.NET 实体数据模型”。
当我们添加完毕edmx文件后,更改一下edmx的属性,把“代码生成策略”改为”无”。因为我们要使用T4模板来分离edmx生成的文件,利于我们的分层,所以这里非常的重要。
然后我们在edmx的设计界面右键点击,选择“添加代码生成项”。
然后选择“POCO Generator With Validations”这个微软提供的T4模板。最后在Model项目中生成了2个T4文件和对应的.cs文件
但是此时,我们会发生成的代码是有问题的,因为在Model项目中并没有引用“System.ComponentModel.DataAnnotations”的dll文件,所以加入这个文件,同时把生成的实体类中的 [MaxLength(50)]这个Attribute去掉,否则是错误的哦。
接下的步骤就是复制粘贴了,我们把生成的School.Context.tt文件复制到DAL项目中,当然肯定要更改命名空间了!
当我们把School.Context.tt复制到DAL项目中的时候,回发现School.Context.cs文件变成一个空文件了,不要担心,因为School.Context.tt找不到edmx文件了,此时我们打开这个文件并更改edmx的路径。如下所示:
string inputFile = @"..\\Com.ArHat.Model\\School.edmx";
然后我们保存tt文件,会发现此时的School.Context.cs文件又有内容了。但是编译的时候确实错的。
原因是我们在DAL中没有引用System.Data.Entity.dll文件。添加一下引用就可以了。此时就基本上大功告成了,我们在BLL中写一个类用来测试一下我们的劳动成功吧!
首先还要在BLL项目中添加”System.Data.Entity.dll”的引用。建立一个B_Student.cs文件,内容如下:
public class B_Studnet { private DAL.SchoolEntities context = new DAL.SchoolEntities(); public List<Model.student> GetAllStudent() { var query = from stu in context.student orderby stu.sid select stu; return query.ToList<Model.student>(); } }
然后我们在Com.ArHat.Test主项目中测试一下,代码如下:
class Program
{ static void Main(string[] args) { BLL.B_Studnet studentBLL = new BLL.B_Studnet(); foreach (Model.student stu in studentBLL.GetAllStudent())
{ Console.WriteLine(stu.sname); } } }
运行一下看看效果:
哦,不。怎么可能报错呢.这是为什么呢?其实问题就出在程序运行的时候是查找的主项目中的App.config文件,而我们的链接字符串是在Model项目中生成的,所以在程序运行的时候,是无法找到的,解决方法就是把Model中的App.config文件复制到主项目中就可以了。然后我们在来测试一下。
激动人心的时候终于到来了,成功了,我们成功了!呵呵。其实这也没什么的。通过上面的步骤,我们知道如何把edmx文件分成两个部分了,一个是实体类,一个是DbContext了。这样就达到了我们分层的目的了。
好了,今天就到这里吧!
Entity Framework学习笔记(一)的更多相关文章
- Entity Framework 学习笔记(2)
上期回顾:Entity Framework 学习笔记(1) Entity Framework最主要的东西,就是自己创建的.继承于DbContext的类: /// <summary> /// ...
- Entity Framework学习笔记
原文地址:http://www.cnblogs.com/frankofgdc/p/3600090.html Entity Framework学习笔记——错误汇总 之前的小项目做完了,到了总结经验和 ...
- ADO.NET Entity Framework学习笔记(3)ObjectContext
ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转] 说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject ...
- Entity Framework学习笔记——错误汇总
之前的小项目做完了,到了总结经验和更新学习笔记的时间了.开始正题之前先啰嗦一下,对之前的学习目标进行一个调整:“根据代码生成表”与“生成数据库脚本和变更脚本”合并为“Code First模式日常使用篇 ...
- Entity Framework学习笔记——记一个错误解决方式及思路
继续之前设定的学习目标前,先来一篇小小的外篇.按照第一篇里的配置方式配置好的工程前两天还能正常工作,昨天却突然无法通过Add-Migration命令进行数据库的升级.错误信息如下: System.Da ...
- Entity Framework学习笔记——配置EF
初次使用Entity Framework(以下简称EF),为了避免很快忘记,决定开日志记录学习过程和遇到的问题.因为项目比较小,只会用到EF的一些基本功能,因此先在此处制定一个学习目标:1. 配置EF ...
- Entity Framework学习笔记(四)----Linq查询(1)
请注明转载地址:http://www.cnblogs.com/arhat 从本章开始,老魏就介绍一下Entity Framework使用Linq来查询数据,也就是Linq To Entity.其实在E ...
- Entity Framework学习笔记(三)----CRUD(2)
请注明转载地址:http://www.cnblogs.com/arhat 昨天晚上老魏配的机器终于到了,可是拿回来之后什么都组装好了,唯独差一个非常重要的组件"电源线",老魏那个汗 ...
- Entity Framework学习笔记(二)----CRUD(1)
请注明转载地址:http://www.cnblogs.com/arhat 这篇文章老魏和大家分享一下Entity Framework的CRUD操作,在这之前呢,老魏先说一下老魏对EF的一个整体的认识, ...
随机推荐
- ButterKnife的简单使用
刚刚学习Android,也不知道算不算已经入门!但是总感觉自己没有什么提高,所以就把一些学习内容写一遍下来. 今天接触了ButterKnife这个第三方框架 GitHub地址:https://gith ...
- 服务器bonding
server cat /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 IPADDR=211.98.243.231 NETMASK=255 ...
- markdown语法学习效果预览
注: 结合markdown官方文档 其中大部分例子和说明文字都摘自官方文档 官方链接:Markdown: Basics (快速入门). 一 段落.标题.区块代码 Markdown 支持两种标题的语法, ...
- 检查字符串长度 检查字符串是否为空 用正则表达式验证出版物的ISBN号 用正则表达式验证邮证编码 验证字符串中是否含有汉字
<?php /** * 常用的正则表达式来验证信息.如:网址 邮箱 手机号等 */ class check { /** * 正则表达式验证email格式 * * @param string $s ...
- JAVA设计模式--strategy(策略者模式)
概念策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.(原文:The Strategy Pattern defines a fa ...
- 2.1Android底层开发需要哪些工具
开发.测试和调试Linux驱动.HAL程序库需要的工具: (1)JDK6或以上版本: (2)Eclipse3.4或以上版本: (3)ADT(用于开发Android应用程序): (4)CDT(用于开发A ...
- 码农谷 求前N项之和
题目描述 有一分数序列:2/1.3/2.5/3.8/5.13/8.21/13.......求出这个数列的前N项之和,保留两位小数. 输入描述 N 输出描述 数列前N项和 样例 输入: 输出: 16.4 ...
- POJ C程序设计进阶 编程题#4:括号匹配问题
编程题#4:扩号匹配问题 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在某 ...
- 《第一行代码--Android》阅读笔记之广播
广播接收器 1.注册方式 动态注册:在程序中注册,如在Activity里的onCreate()方法中注册 静态注册:在AndroidManifest.xml中注册 2.可接收哪些广播 接收系统消息 ...
- C#中补0
C#中补0 编写人:CC阿爸 2014-3-16 首先先增加两个左补齐又补齐的函数 #region 该函数动态添加空格,对齐小票 public string AddSpace(string text ...