当前位置: 首页 > news >正文

Entity Framework 之三层架构

今天,我们谈一下如何用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哈哈~

转载于:https://www.cnblogs.com/JinvidLiang/p/4660085.html

相关文章:

  • java发送http的get、post请求
  • 在自己的网站添加关注新浪关注按钮
  • go语言的排序和搜索
  • iOS Sprite Kit教程之场景的设置
  • Https通讯原理
  • 通过javamelody监控web应用的性能指标
  • JS将秒转换为 天-时-分-秒
  • Linux下RPM软件包的安装及卸载
  • Ionic系列——Ionic介绍
  • Atom飞行手册翻译: 2.6 代码段
  • jquery1.0源码【1-60行】构造函数及全局$变量
  • Running Redis as a User Daemon on OSX With Launchd
  • webx5 复选框的显示
  • Linux驱动总结3- unlocked_ioctl和堵塞(waitqueue)读写函数的实现 【转】
  • android makefile 小结
  • 【面试系列】之二:关于js原型
  • 2017 年终总结 —— 在路上
  • canvas 绘制双线技巧
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Mysql优化
  • nginx 负载服务器优化
  • REST架构的思考
  • Spring Cloud中负载均衡器概览
  • 大快搜索数据爬虫技术实例安装教学篇
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 回流、重绘及其优化
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 使用 @font-face
  • 数据可视化之 Sankey 桑基图的实现
  • 项目管理碎碎念系列之一:干系人管理
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 再谈express与koa的对比
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (2020)Java后端开发----(面试题和笔试题)
  • (70min)字节暑假实习二面(已挂)
  • (规划)24届春招和25届暑假实习路线准备规划
  • (论文阅读30/100)Convolutional Pose Machines
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .bashrc在哪里,alias妙用
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET建议使用的大小写命名原则
  • 。Net下Windows服务程序开发疑惑
  • :O)修改linux硬件时间
  • [100天算法】-二叉树剪枝(day 48)
  • [20150321]索引空块的问题.txt