zoukankan      html  css  js  c++  java
  • 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哈哈~

  • 相关阅读:
    npm ERR! code EINTEGRITY npm ERR! sha1- 报错解决办法
    create-react-app创建项目报错SyntaxError: Unexpected end of JSON input while parsing near '...ttachment":false,"tar' npm代理
    七大设计原则
    UML类图和时序图
    linux环境下排查cpu占比高的MySQL数据库sql语句
    Angular 2 imooc 学习笔记
    angular JS 学习笔记
    Hibernate HQL基础
    Hibernate注解
    Hibernate多对多映射
  • 原文地址:https://www.cnblogs.com/JinvidLiang/p/4660085.html
Copyright © 2011-2022 走看看