请注明转载地址: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学习笔记(一)的更多相关文章

  1. Entity Framework 学习笔记(2)

    上期回顾:Entity Framework 学习笔记(1) Entity Framework最主要的东西,就是自己创建的.继承于DbContext的类: /// <summary> /// ...

  2. Entity Framework学习笔记

    原文地址:http://www.cnblogs.com/frankofgdc/p/3600090.html Entity Framework学习笔记——错误汇总   之前的小项目做完了,到了总结经验和 ...

  3. ADO.NET Entity Framework学习笔记(3)ObjectContext

    ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转]   说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject ...

  4. Entity Framework学习笔记——错误汇总

    之前的小项目做完了,到了总结经验和更新学习笔记的时间了.开始正题之前先啰嗦一下,对之前的学习目标进行一个调整:“根据代码生成表”与“生成数据库脚本和变更脚本”合并为“Code First模式日常使用篇 ...

  5. Entity Framework学习笔记——记一个错误解决方式及思路

    继续之前设定的学习目标前,先来一篇小小的外篇.按照第一篇里的配置方式配置好的工程前两天还能正常工作,昨天却突然无法通过Add-Migration命令进行数据库的升级.错误信息如下: System.Da ...

  6. Entity Framework学习笔记——配置EF

    初次使用Entity Framework(以下简称EF),为了避免很快忘记,决定开日志记录学习过程和遇到的问题.因为项目比较小,只会用到EF的一些基本功能,因此先在此处制定一个学习目标:1. 配置EF ...

  7. Entity Framework学习笔记(四)----Linq查询(1)

    请注明转载地址:http://www.cnblogs.com/arhat 从本章开始,老魏就介绍一下Entity Framework使用Linq来查询数据,也就是Linq To Entity.其实在E ...

  8. Entity Framework学习笔记(三)----CRUD(2)

    请注明转载地址:http://www.cnblogs.com/arhat 昨天晚上老魏配的机器终于到了,可是拿回来之后什么都组装好了,唯独差一个非常重要的组件"电源线",老魏那个汗 ...

  9. Entity Framework学习笔记(二)----CRUD(1)

    请注明转载地址:http://www.cnblogs.com/arhat 这篇文章老魏和大家分享一下Entity Framework的CRUD操作,在这之前呢,老魏先说一下老魏对EF的一个整体的认识, ...

随机推荐

  1. ButterKnife的简单使用

    刚刚学习Android,也不知道算不算已经入门!但是总感觉自己没有什么提高,所以就把一些学习内容写一遍下来. 今天接触了ButterKnife这个第三方框架 GitHub地址:https://gith ...

  2. 服务器bonding

    server cat /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 IPADDR=211.98.243.231 NETMASK=255 ...

  3. markdown语法学习效果预览

    注: 结合markdown官方文档 其中大部分例子和说明文字都摘自官方文档 官方链接:Markdown: Basics (快速入门). 一 段落.标题.区块代码 Markdown 支持两种标题的语法, ...

  4. 检查字符串长度 检查字符串是否为空 用正则表达式验证出版物的ISBN号 用正则表达式验证邮证编码 验证字符串中是否含有汉字

    <?php /** * 常用的正则表达式来验证信息.如:网址 邮箱 手机号等 */ class check { /** * 正则表达式验证email格式 * * @param string $s ...

  5. JAVA设计模式--strategy(策略者模式)

    概念策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.(原文:The Strategy Pattern defines a fa ...

  6. 2.1Android底层开发需要哪些工具

    开发.测试和调试Linux驱动.HAL程序库需要的工具: (1)JDK6或以上版本: (2)Eclipse3.4或以上版本: (3)ADT(用于开发Android应用程序): (4)CDT(用于开发A ...

  7. 码农谷 求前N项之和

    题目描述 有一分数序列:2/1.3/2.5/3.8/5.13/8.21/13.......求出这个数列的前N项之和,保留两位小数. 输入描述 N 输出描述 数列前N项和 样例 输入: 输出: 16.4 ...

  8. POJ C程序设计进阶 编程题#4:括号匹配问题

    编程题#4:扩号匹配问题 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在某 ...

  9. 《第一行代码--Android》阅读笔记之广播

    广播接收器 1.注册方式 动态注册:在程序中注册,如在Activity里的onCreate()方法中注册 静态注册:在AndroidManifest.xml中注册   2.可接收哪些广播 接收系统消息 ...

  10. C#中补0

     C#中补0 编写人:CC阿爸 2014-3-16 首先先增加两个左补齐又补齐的函数 #region 该函数动态添加空格,对齐小票 public string AddSpace(string text ...