Entity Framework 之三層架構

今天,咱們談一下如何用Entity Framework構建一個三層架構。即包括DAL層,BLL層和MODEL層。咱們先看一下目錄結構,以下圖:html

                                                                              

目錄中,咱們有Web層,AVON.DMS.Model是實體層,AVON.DMS.DAL是數據訪問層,AVON.DMS.BLL是業務邏輯層.數據庫

下面,咱們來看看怎麼把三層分出來。架構

首先,咱們先新建項目文件,並建立Web層。以下圖:oracle

                                                                            

新建AVON.DMS.Model 類庫,AVON.DMS.DAL 類庫,AVON.DMS.BLL 類庫:框架

                                                                          

此類庫主要引入數據庫表。由於我用的是Oracle數據庫,因此,你還得安裝.NET訪問Oracle的ODAC組件。ide

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

安裝完成以後,咱們來在AVON.DMS.Model新增一個ADO.NET 實體數據模型,以下圖:測試

                        

點擊 Add, 下一步:spa

                                               

下一步:code

                                              

選擇數據庫並輸入帳號和密碼:

                                                       

測試鏈接:

                                                        

下一步:

                                                      

下一步:

                                                    

點擊 "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哈哈~

相關文章
相關標籤/搜索