今天,我们谈一下如何用Entity Framework构建一个三层架构。即包括DAL层,BLL层和MODEL层。我们先看一下目录结构,如下图:

目录中,我们有Web层,AVON.DMS.Model是实体层,AVON.DMS.DAL是数据访问层,AVON.DMS.BLL是业务逻辑层.

下面,我们来看看怎么把三层分出来。

首先,我们先新建项目文件,并创建Web层。如下图:

新建AVON.DMS.Model 类库,AVON.DMS.DAL 类库,AVON.DMS.BLL 类库:

此类库主要引入数据库表。因为我用的是Oracle数据库,所以,你还得安装.NET访问Oracle的ODAC组件。

下载地址:http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html

安装完成之后,我们来在AVON.DMS.Model新增一个ADO.NET 实体数据模型,如下图:

点击 Add, 下一步:

下一步:

选择数据库并输入账号和密码:

测试连接:

下一步:

下一步:

点击 "Finish"之后,会自动生成Entity Framework框架的文件,如下图,我们看一下目录结构:

如图:箭头1是数据库层访问代码,箭头2是自动生成的实体类。

下一步,我们要把箭头1的代码层移到AVON.DMS.DAL层,如下图:

但是,保存之后,DMSModel.Context.cs里面并没有生成代码。先别急,我们修改一下DMSModel.Context.tt文件中DMSModel.edmx的路径,如下:

再引用EntityFramework.dll,AVON.DMS.Model和System.Data.Entity。编译成功之后,基本完成了Model层和DAL层的分离。

另外,需要把AVON.DMS.Model层中App.config的连接字符串拷贝到Web层。

 <add name="Entities" connectionString="metadata=res:***********" providerName="System.Data.EntityClient" />

下面,我们来编写基本的CRUD(增删查改)代码:(备注:由于作者使用的Oracle数据库表没有设置主键,所以要对DMSModel.edmx文件进行修改,可以查看另一篇文章Oracle + Entity Framework 更新没有设置主键的表)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AVON.DMS.Model; namespace AVON.DMS.DAL
{
public class RepDAL
{
Entities DMSDAL = new Entities();
/// <summary>
/// 添加会员
/// </summary>
/// <param name="rep">会员实体</param>
/// <returns></returns>
public bool AddtoRep(REP rep)
{
try
{
DMSDAL.REP.Add(rep);
DMSDAL.SaveChanges();
}
catch (Exception)
{
return false;
}
return true;
} /// <summary>
/// 根据会员编号删除会员
/// </summary>
/// <param name="repNo">会员编号</param>
/// <returns></returns>
public bool DeleteRep(string repNo)
{
try
{
REP delRep = DMSDAL.REP.First<AVON.DMS.Model.REP>(o => o.NO == repNo);
DMSDAL.REP.Remove(delRep);
DMSDAL.SaveChanges();
}
catch (Exception)
{
return false;
}
return true;
} /// <summary>
/// 根据会员编号返回会员实体
/// </summary>
/// <param name="repNo">会员编号</param>
/// <returns></returns>
public REP GetFromRep(string repNo)
{
try
{
return DMSDAL.REP.SingleOrDefault<AVON.DMS.Model.REP>(t => t.NO == repNo);
}
catch (Exception)
{
return null;
}
} /// <summary>
/// 更新实体
/// </summary>
/// <param name="rep">实体</param>
/// <returns></returns>
public bool UpdateRep(REP rep)
{
try
{
REP upRep = DMSDAL.REP.First<AVON.DMS.Model.REP>(o => o.NO == rep.NO);
upRep.ADDRESS1 = rep.ADDRESS1;
upRep.BIRTHDAY = rep.BIRTHDAY;
upRep.DELIVER = rep.DELIVER;
upRep.MAIL_NO = rep.MAIL_NO;
DMSDAL.SaveChanges();
}
catch (Exception)
{
return false;
}
return true;
} }
}

以上是在AVON.DMS.DAL中添加的代码,可以作为数据库层的代码。而业务逻辑代码可以编写在AVON.DMS.BLL层。

源代码可以在这里下载:源码

Entity Framework 是微软基于ADO.NET的ORM框架,Entity Framework的主要特点:
1. 支持多种数据库(Microsoft SQL Server, Oracle, and DB2);
2. 强劲的映射引擎,能很好地支持存储过程;
3. 提供Visual Studio集成工具,进行可视化操作;
4. 能够与ASP.NET, WPF, WCF, WCF Data Services进行很好的集成。

以上是一篇简单的入门介绍,希望能对您有所帮助,O(∩_∩)O哈哈~

Entity Framework 之三层架构的更多相关文章

  1. 基于EF+WCF的通用三层架构及解析

    分享基于EF+WCF的通用三层架构及解析 本项目结合EF 4.3及WCF实现了经典三层架构,各层面向接口,WCF实现SOA,Repository封装调用,在此基础上实现了WCFContext,动态服务 ...

  2. Entity Framework 数据并发访问错误原因分析与系统架构优化

    博客地址 http://blog.csdn.net/foxdave 本文主要记录近两天针对项目发生的数据访问问题的分析研究过程与系统架构优化,我喜欢说通俗的白话,高手轻拍 1. 发现问题 系统新模块上 ...

  3. ORM,Entity Framework介绍以及其所包含的基础架构介绍

    一:entity framework 6.0 ORM (实体关系模型) O: Domain Object 领域模型 R: Relational Database 关系型数据库 M: Mapping 映 ...

  4. Entity Framework 与 面向对象

    说要分享,我了个*,写了一半放草稿箱了两个星期都快发霉了,趁着周末写完发出来吧. 文章分为五部分: 基础.类讲述的是用到的一些EF与面向对象的基础: 业务是讲怎么划分设计业务: 设计模式和工作模式讲述 ...

  5. ADO.NET Entity Framework

    ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案, 早期被称为 ObjectSpace,现已经包含在 V ...

  6. csharp: NHibernate and Entity Framework (EF) (object-relational mapper)

    代码生成器: 1. http://www.codesmithtools.com/ 2.https://sourceforge.net/projects/mygeneration/ 3. http:// ...

  7. MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  8. Entity FrameWork 与 NHibernate

      1 Nhibernate 展示了NHibernate在数据库和用程序之间提供了一个持久层. 应用程序自己提供ADO.NET连接,并且自行管理事务.NHibernate体系结构如图1-51所示.它体 ...

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

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

随机推荐

  1. codeforces Gym 100500C D.Hall of Fame 排序

    Hall of Fame Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/attachmen ...

  2. OpenCV 2.2版本号以上显示图片到 MFC 的 Picture Control 控件中

    OpenCV 2.2 以及后面的版本号取消掉了 CvvImage.h 和CvvImage.cpp 两个文件,直接导致了苦逼的程序猿无法调用里面的显示函数来将图片显示到 MFC 的 Picture Co ...

  3. poj 3613 Cow Relays

    Cow Relays Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5411   Accepted: 2153 Descri ...

  4. Open gl 的不规则图形的4联通种子递归填充和扫描线种子递归填充算法实现

    实验题目:不规则区域的填充算法 实验目的:验证不规则区域的填充算法 实验内容:利用VC与OpenGL,实现不规则区域的填充算法. 1.必做:实现简单递归的不规则区域填充算法. 2.选做:针对简单递归算 ...

  5. MongoDB 主从复制小实验

    MongoDB 主从复制小实验 操作环境描述:WIN8  64位操作系统,内装虚拟机为CentOS 5.5 32位系统. 操作描述:跟其他关系型数据库类似,在主库进行数据操作,将数据同步到从节点,从节 ...

  6. iOS6 / iOS7 状态栏高度适配

    问题原因:iOS7的状态栏(status bar)不再占用单独的20px,所以假设你在iOS6上的界面布局是正常的,那么到了iOS7上就会变成以下这个样子:             左边是iOS6界面 ...

  7. Android下将图片载入到内存中

    Android的系统的标准默认每一个应用程序分配的内存是16M.所以来说是很宝贵的,在创建应用的时候要尽可能的去节省内存,可是在载入一些大的文件的时候,比方图片是相当耗内存的,一个1.3M的图片,分辨 ...

  8. quickstack is a tool to take call stack

    https://github.com/yoshinorim/quickstack quickstack is a tool to take call stack traces with minimal ...

  9. SparkSQLTest.scala

    /** * Created by root on 9/7/15. */ import org.apache.spark.SparkConf import org.apache.spark.SparkC ...

  10. 文件I/O(不带缓冲)之文件共享

    UNIX系统支持在不同进程间共享打开的文件. 内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响. (1)每个进程在进程表中都有一个记录项,记录项 ...