2四 、ASP.NET MVC入门到精通——数据库仓库储存

本种类目录:ASP.NET
MVC4入门到通晓体系目录汇总

题记:喜欢的唱片,像是琳琅满目中颇具存在感的物件儿,与之遇见,便达到灵魂吸引般的默契。

业务层调用数据层对象,作者不想每趟都new叁个数据层对象,而是在数据层创造2个存款和储蓄,统管全体的对象调用。

         
二〇一八年十二月初,秋意渐浓,刚停止TV剧拍片的鹿晗(LU HAN),剪了不够长的新发型,看上去清瘦、利落。他说“笔者在准备新专辑”,之后的公然募集,以及电影和电视宣传中悄悄和大出品人聊天,被问起近况,他都以认真地给出同一句话“小编在准备新专辑”,有时候还要加上“全力”二字,那便是他专程令人爱不释手的地点,以本人这样不算市侩的老油条,面对大制片人,也未免会换个无伤大雅的句式,借机强调一下本身的饰演者身份,但他从没,他果然没有成为大部分人的规范。恰是不上心,正是大布局。基于三观正确、审美在线的前提下,XXVII那张专辑,和二十六虚岁的他一样,经得起成熟眼光最挑剔的审视。

1、在IDAL项目中,新建IDBSession.tt模板

         
随机播放鹿哈尼XXVII专辑,较之上一张Reloaded专辑的试验性、开拓性,那几个新歌更趋向于内敛、成熟,技术上站在风尚前线,特性如故明显,但态度温和:那是笔者的作风,你今后只怕不喜欢,但毕竟不会忽略本人。正如其人,他谦虚,同时也横行霸道,他包容,并不流俗。对于客官,只要有基本的音乐审美能力,会感受到一种匠人精神存在于当中的每一首歌,精工细作,纤毫毕现,低调又美观,专注于内涵,在那之中最无可代替的是这厮,鹿晗(英文名:lù hán)。鹿晗先生的歌最出色的特质,是可以与时间较量。以后的某一天,技术会发展,曲风会立异,你恐怕会回头奚弄今后的音乐风潮,但鹿哈尼的音乐在未来在此以前决定期存款在,传递的德才、活力和审美情趣,那些不会过时,依旧是惬意的。

图片 1图片 2

          电子音乐本无局限,面对另类PAJERO&B、EDM Trap、Future
Bass等音乐风格及其数百分段,有个别影星,甚至单独音乐人,就像在人山人海的路口迷失了团结,个人体会特别不明晰,交给观者的文章面目模糊。有音乐能源配置高的造作团队,不见得能做到一首脍炙人口的文章,必要求有才华的歌者来控制,并添加性子化标签。鹿哈尼万分通晓本人的私人住房特质,善于挖掘本身在唱腔、曲风、音乐统筹地方差异的可能性,因而在XXVII专辑的驾乘上呈现贯虱穿杨。整张专辑全貌毕现后,才明白开端放出《某时某刻
Catch me when I
fall》的用意,那首歌中Future的复古音色,Drop部分人声走低、配器高起,拿捏出微薄,立下了统御、取舍的小说思路;鹿校草清冽、顺畅的声调,隐忍克制的心态,微凉空旷的氛围, 奠定了整张专辑的办法基调。

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@ output extension=".cs"#> 
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\MODEL\OA.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace IDAL
{
public partial interface IDBSession
{
<#
    // Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
#>
   I<#=entity.Name#>DAL I<#=entity.Name#>DAL{get;set;}
<#}#>
}
}

         
当下的音乐环境,笔者对于规模化、概念化出唱片的歌者是心怀崇敬的。尽管有Reloaded专辑不错的祝词和销量打底,在似暖还寒的市镇基准下,筹备并一下子就消除了整张专辑的制作,仍急需勇于的神经和中度的勇气。所以,与其面对鹿校草专辑惊人的销量频露醋意,还不如懊悔自个儿不足信念和布署。XXVII专辑的层面和定义使得歌曲自个儿、歌曲之间、歌曲与歌唱家之间,在细节和气宇上,有了复杂的关系。《触发
Set it off》中“双管齐下的较量”,配有调较钟表的齿轮咬合声;《某时某刻
Catch me when I
fall》这首关乎过往的歌里,也有近似的时针相当的慢运营的成分;还有《夜行记 Say
it》的钟声;那是壹位爱表人员的情趣吗?

View Code

         
个人特质是正统歌星透过音乐传递给观者最为深刻的有个别,XXVII专辑的规模和定义,使得歌曲发布更为立体。《某时某刻
Catch me when I fall》、《要是 What if I said》、《时差 On
call》传递的内敛心绪;《skin to skin》、《触发 Set it
off》展现的秘闻气质;《微辽源市 Winter song》、《夜行记 Say
it》的轻松活泼;《敢 Roleplay》、《零界点 On
fire》的年轻态度,既然而分直白,也可是分生硬。XXVII那张专辑的调头是因繁就简的铺张浪费,是收放自如的总统。你会捕捉到有别于其余歌曲的方枘圆凿气质,令人以为新鲜,充满想象力。鹿晗(英文名:lù hán)在音乐上的挑三拣四,关乎他的特性、品味和历史观,是他的声调。

Ctrl+S后自动生成IDBSession接口

          在演唱会现场听了《某时某刻 Catch me when I fall》、《如若 What
if I said》,也看TV晚会上鹿晗(英文名:lù hán)演唱的《微长春市 温特 song》、《skin to
skin》,除了日臻成熟的声调、稳健的飓风、果敢的临场应变能力等等这几个直观的感触,舞台上唱着这个歌的鹿校草,有着年轻美术师的非正规摄人心魄性格,与创作人歌合一,相互成就。鹿晗(LU HAN)的唱腔,让你相信,真的有人能够在沸腾中央守一线小寒,在可选的无尽里选用出值得付出与坚韧不拔的事物,不过分流于口舌,亦无信仰般庄庄严穆。真的有人,把性情与教养调和得正好,外形完美,内在矜贵,立于厅堂即精英,立于街头即潮范儿。

图片 3图片 4

         
音乐是他的初心,他别的大千世界皆知的两大爱好,足球和手表,不失为佐证他音乐上的村办特质、格调与腔调的好路子。他踢球,是研讨战术与技术的。他爱表,是挑剔工艺与科学和技术的,入手的设计标准是有棱角又不离经叛道。清晨的小鹿的音乐、足球、手表都有一起的特质,美和技艺(技术当然绕不开立异),充盈着她的血流和旺盛,他的笔调与腔调。音乐化解不了现实题材,但能抚慰人心;有格调不可能避开生死疲劳,但它的伊斯梅洛夫能够应对世事变迁,无论何种碰到都活出质量。而有腔调的鹿晗(LU HAN),早已把我们不得而知的挫败和损伤,内化为彻底而温暖的微笑挂在嘴角了。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace IDAL
{
public partial interface IDBSession
{
   IBill_LeaveDAL IBill_LeaveDAL{get;set;}
   IoldWF_AutoTransactNodeDAL IoldWF_AutoTransactNodeDAL{get;set;}
   IoldWF_BillFlowNodeDAL IoldWF_BillFlowNodeDAL{get;set;}
   IoldWF_BillFlowNodeRemarkDAL IoldWF_BillFlowNodeRemarkDAL{get;set;}
   IoldWF_BillStateDAL IoldWF_BillStateDAL{get;set;}
   IoldWF_NodeDAL IoldWF_NodeDAL{get;set;}
   IoldWF_NodeStateDAL IoldWF_NodeStateDAL{get;set;}
   IoldWF_WorkFlowDAL IoldWF_WorkFlowDAL{get;set;}
   IoldWF_WorkFlowNodeDAL IoldWF_WorkFlowNodeDAL{get;set;}
   IOu_DepartmentDAL IOu_DepartmentDAL{get;set;}
   IOu_PermissionDAL IOu_PermissionDAL{get;set;}
   IOu_RoleDAL IOu_RoleDAL{get;set;}
   IOu_RolePermissionDAL IOu_RolePermissionDAL{get;set;}
   IOu_UserInfoDAL IOu_UserInfoDAL{get;set;}
   IOu_UserRoleDAL IOu_UserRoleDAL{get;set;}
   IOu_UserVipPermissionDAL IOu_UserVipPermissionDAL{get;set;}
   IW_WorkFlowDAL IW_WorkFlowDAL{get;set;}
   IW_WorkFlowBranchDAL IW_WorkFlowBranchDAL{get;set;}
   IW_WorkFlowNodeDAL IW_WorkFlowNodeDAL{get;set;}
   IW_WrokFlowRoleDAL IW_WrokFlowRoleDAL{get;set;}
   IWR_WorkFlowApplyDAL IWR_WorkFlowApplyDAL{get;set;}
   IWR_WrokFlowApplyDetailsDAL IWR_WrokFlowApplyDetailsDAL{get;set;}
}
}

View Code

② 、在DAL项目中贯彻IDBSession接口

新建DBSession.tt模板

图片 5图片 6

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@ output extension=".cs"#> 
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\MODEL\OA.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IDAL;

namespace DAL
{
public partial class DBSession:IDBSession
{
<#
int index=0;
    // Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
index++;
#>
    #region <#=index #> 数据接口 I<#=entity.Name#>DAL
   I<#=entity.Name#>DAL i<#=entity.Name#>DAL;
  public I<#=entity.Name#>DAL I<#=entity.Name#>DAL{
   get
   {
   if(i<#=entity.Name#>DAL==null)
      i<#=entity.Name#>DAL=new <#=entity.Name#>DAL();
      return  i<#=entity.Name#>DAL;
   }
   set
   {
    i<#=entity.Name#>DAL=value;
   }
   }
   #endregion

<#}#>
}
}

View Code

Ctrl+S后自动生成DBSession类

图片 7图片 8

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IDAL;

namespace DAL
{
public partial class DBSession:IDBSession
{
    #region 1 数据接口 IBill_LeaveDAL
   IBill_LeaveDAL iBill_LeaveDAL;
  public IBill_LeaveDAL IBill_LeaveDAL{
   get
   {
   if(iBill_LeaveDAL==null)
      iBill_LeaveDAL=new Bill_LeaveDAL();
      return  iBill_LeaveDAL;
   }
   set
   {
    iBill_LeaveDAL=value;
   }
   }
   #endregion

    #region 2 数据接口 IoldWF_AutoTransactNodeDAL
   IoldWF_AutoTransactNodeDAL ioldWF_AutoTransactNodeDAL;
  public IoldWF_AutoTransactNodeDAL IoldWF_AutoTransactNodeDAL{
   get
   {
   if(ioldWF_AutoTransactNodeDAL==null)
      ioldWF_AutoTransactNodeDAL=new oldWF_AutoTransactNodeDAL();
      return  ioldWF_AutoTransactNodeDAL;
   }
   set
   {
    ioldWF_AutoTransactNodeDAL=value;
   }
   }
   #endregion

    #region 3 数据接口 IoldWF_BillFlowNodeDAL
   IoldWF_BillFlowNodeDAL ioldWF_BillFlowNodeDAL;
  public IoldWF_BillFlowNodeDAL IoldWF_BillFlowNodeDAL{
   get
   {
   if(ioldWF_BillFlowNodeDAL==null)
      ioldWF_BillFlowNodeDAL=new oldWF_BillFlowNodeDAL();
      return  ioldWF_BillFlowNodeDAL;
   }
   set
   {
    ioldWF_BillFlowNodeDAL=value;
   }
   }
   #endregion

    #region 4 数据接口 IoldWF_BillFlowNodeRemarkDAL
   IoldWF_BillFlowNodeRemarkDAL ioldWF_BillFlowNodeRemarkDAL;
  public IoldWF_BillFlowNodeRemarkDAL IoldWF_BillFlowNodeRemarkDAL{
   get
   {
   if(ioldWF_BillFlowNodeRemarkDAL==null)
      ioldWF_BillFlowNodeRemarkDAL=new oldWF_BillFlowNodeRemarkDAL();
      return  ioldWF_BillFlowNodeRemarkDAL;
   }
   set
   {
    ioldWF_BillFlowNodeRemarkDAL=value;
   }
   }
   #endregion

    #region 5 数据接口 IoldWF_BillStateDAL
   IoldWF_BillStateDAL ioldWF_BillStateDAL;
  public IoldWF_BillStateDAL IoldWF_BillStateDAL{
   get
   {
   if(ioldWF_BillStateDAL==null)
      ioldWF_BillStateDAL=new oldWF_BillStateDAL();
      return  ioldWF_BillStateDAL;
   }
   set
   {
    ioldWF_BillStateDAL=value;
   }
   }
   #endregion

    #region 6 数据接口 IoldWF_NodeDAL
   IoldWF_NodeDAL ioldWF_NodeDAL;
  public IoldWF_NodeDAL IoldWF_NodeDAL{
   get
   {
   if(ioldWF_NodeDAL==null)
      ioldWF_NodeDAL=new oldWF_NodeDAL();
      return  ioldWF_NodeDAL;
   }
   set
   {
    ioldWF_NodeDAL=value;
   }
   }
   #endregion

    #region 7 数据接口 IoldWF_NodeStateDAL
   IoldWF_NodeStateDAL ioldWF_NodeStateDAL;
  public IoldWF_NodeStateDAL IoldWF_NodeStateDAL{
   get
   {
   if(ioldWF_NodeStateDAL==null)
      ioldWF_NodeStateDAL=new oldWF_NodeStateDAL();
      return  ioldWF_NodeStateDAL;
   }
   set
   {
    ioldWF_NodeStateDAL=value;
   }
   }
   #endregion

    #region 8 数据接口 IoldWF_WorkFlowDAL
   IoldWF_WorkFlowDAL ioldWF_WorkFlowDAL;
  public IoldWF_WorkFlowDAL IoldWF_WorkFlowDAL{
   get
   {
   if(ioldWF_WorkFlowDAL==null)
      ioldWF_WorkFlowDAL=new oldWF_WorkFlowDAL();
      return  ioldWF_WorkFlowDAL;
   }
   set
   {
    ioldWF_WorkFlowDAL=value;
   }
   }
   #endregion

    #region 9 数据接口 IoldWF_WorkFlowNodeDAL
   IoldWF_WorkFlowNodeDAL ioldWF_WorkFlowNodeDAL;
  public IoldWF_WorkFlowNodeDAL IoldWF_WorkFlowNodeDAL{
   get
   {
   if(ioldWF_WorkFlowNodeDAL==null)
      ioldWF_WorkFlowNodeDAL=new oldWF_WorkFlowNodeDAL();
      return  ioldWF_WorkFlowNodeDAL;
   }
   set
   {
    ioldWF_WorkFlowNodeDAL=value;
   }
   }
   #endregion

    #region 10 数据接口 IOu_DepartmentDAL
   IOu_DepartmentDAL iOu_DepartmentDAL;
  public IOu_DepartmentDAL IOu_DepartmentDAL{
   get
   {
   if(iOu_DepartmentDAL==null)
      iOu_DepartmentDAL=new Ou_DepartmentDAL();
      return  iOu_DepartmentDAL;
   }
   set
   {
    iOu_DepartmentDAL=value;
   }
   }
   #endregion

    #region 11 数据接口 IOu_PermissionDAL
   IOu_PermissionDAL iOu_PermissionDAL;
  public IOu_PermissionDAL IOu_PermissionDAL{
   get
   {
   if(iOu_PermissionDAL==null)
      iOu_PermissionDAL=new Ou_PermissionDAL();
      return  iOu_PermissionDAL;
   }
   set
   {
    iOu_PermissionDAL=value;
   }
   }
   #endregion

    #region 12 数据接口 IOu_RoleDAL
   IOu_RoleDAL iOu_RoleDAL;
  public IOu_RoleDAL IOu_RoleDAL{
   get
   {
   if(iOu_RoleDAL==null)
      iOu_RoleDAL=new Ou_RoleDAL();
      return  iOu_RoleDAL;
   }
   set
   {
    iOu_RoleDAL=value;
   }
   }
   #endregion

    #region 13 数据接口 IOu_RolePermissionDAL
   IOu_RolePermissionDAL iOu_RolePermissionDAL;
  public IOu_RolePermissionDAL IOu_RolePermissionDAL{
   get
   {
   if(iOu_RolePermissionDAL==null)
      iOu_RolePermissionDAL=new Ou_RolePermissionDAL();
      return  iOu_RolePermissionDAL;
   }
   set
   {
    iOu_RolePermissionDAL=value;
   }
   }
   #endregion

    #region 14 数据接口 IOu_UserInfoDAL
   IOu_UserInfoDAL iOu_UserInfoDAL;
  public IOu_UserInfoDAL IOu_UserInfoDAL{
   get
   {
   if(iOu_UserInfoDAL==null)
      iOu_UserInfoDAL=new Ou_UserInfoDAL();
      return  iOu_UserInfoDAL;
   }
   set
   {
    iOu_UserInfoDAL=value;
   }
   }
   #endregion

    #region 15 数据接口 IOu_UserRoleDAL
   IOu_UserRoleDAL iOu_UserRoleDAL;
  public IOu_UserRoleDAL IOu_UserRoleDAL{
   get
   {
   if(iOu_UserRoleDAL==null)
      iOu_UserRoleDAL=new Ou_UserRoleDAL();
      return  iOu_UserRoleDAL;
   }
   set
   {
    iOu_UserRoleDAL=value;
   }
   }
   #endregion

    #region 16 数据接口 IOu_UserVipPermissionDAL
   IOu_UserVipPermissionDAL iOu_UserVipPermissionDAL;
  public IOu_UserVipPermissionDAL IOu_UserVipPermissionDAL{
   get
   {
   if(iOu_UserVipPermissionDAL==null)
      iOu_UserVipPermissionDAL=new Ou_UserVipPermissionDAL();
      return  iOu_UserVipPermissionDAL;
   }
   set
   {
    iOu_UserVipPermissionDAL=value;
   }
   }
   #endregion

    #region 17 数据接口 IW_WorkFlowDAL
   IW_WorkFlowDAL iW_WorkFlowDAL;
  public IW_WorkFlowDAL IW_WorkFlowDAL{
   get
   {
   if(iW_WorkFlowDAL==null)
      iW_WorkFlowDAL=new W_WorkFlowDAL();
      return  iW_WorkFlowDAL;
   }
   set
   {
    iW_WorkFlowDAL=value;
   }
   }
   #endregion

    #region 18 数据接口 IW_WorkFlowBranchDAL
   IW_WorkFlowBranchDAL iW_WorkFlowBranchDAL;
  public IW_WorkFlowBranchDAL IW_WorkFlowBranchDAL{
   get
   {
   if(iW_WorkFlowBranchDAL==null)
      iW_WorkFlowBranchDAL=new W_WorkFlowBranchDAL();
      return  iW_WorkFlowBranchDAL;
   }
   set
   {
    iW_WorkFlowBranchDAL=value;
   }
   }
   #endregion

    #region 19 数据接口 IW_WorkFlowNodeDAL
   IW_WorkFlowNodeDAL iW_WorkFlowNodeDAL;
  public IW_WorkFlowNodeDAL IW_WorkFlowNodeDAL{
   get
   {
   if(iW_WorkFlowNodeDAL==null)
      iW_WorkFlowNodeDAL=new W_WorkFlowNodeDAL();
      return  iW_WorkFlowNodeDAL;
   }
   set
   {
    iW_WorkFlowNodeDAL=value;
   }
   }
   #endregion

    #region 20 数据接口 IW_WrokFlowRoleDAL
   IW_WrokFlowRoleDAL iW_WrokFlowRoleDAL;
  public IW_WrokFlowRoleDAL IW_WrokFlowRoleDAL{
   get
   {
   if(iW_WrokFlowRoleDAL==null)
      iW_WrokFlowRoleDAL=new W_WrokFlowRoleDAL();
      return  iW_WrokFlowRoleDAL;
   }
   set
   {
    iW_WrokFlowRoleDAL=value;
   }
   }
   #endregion

    #region 21 数据接口 IWR_WorkFlowApplyDAL
   IWR_WorkFlowApplyDAL iWR_WorkFlowApplyDAL;
  public IWR_WorkFlowApplyDAL IWR_WorkFlowApplyDAL{
   get
   {
   if(iWR_WorkFlowApplyDAL==null)
      iWR_WorkFlowApplyDAL=new WR_WorkFlowApplyDAL();
      return  iWR_WorkFlowApplyDAL;
   }
   set
   {
    iWR_WorkFlowApplyDAL=value;
   }
   }
   #endregion

    #region 22 数据接口 IWR_WrokFlowApplyDetailsDAL
   IWR_WrokFlowApplyDetailsDAL iWR_WrokFlowApplyDetailsDAL;
  public IWR_WrokFlowApplyDetailsDAL IWR_WrokFlowApplyDetailsDAL{
   get
   {
   if(iWR_WrokFlowApplyDetailsDAL==null)
      iWR_WrokFlowApplyDetailsDAL=new WR_WrokFlowApplyDetailsDAL();
      return  iWR_WrokFlowApplyDetailsDAL;
   }
   set
   {
    iWR_WrokFlowApplyDetailsDAL=value;
   }
   }
   #endregion

}
}

View Code

接下去,大家创立DBSession工厂和上下文工厂,指标是为了升高效能,在线程中国共产党用三个对象。

③ 、IDAL项目中添加IDBSessionFactory接口

namespace IDAL
{
    /// <summary>
    /// 数据仓储工厂
    /// </summary>
   public interface IDBSessionFactory
    {
       IDBSession GetDBSession();
    }
}

DAL项目中添加DBSessionFactory类继承IDBSessionFactory接口

using System.Runtime.Remoting.Messaging;
using IDAL;

namespace DAL
{
    public class DBSessionFactory : IDBSessionFactory
    {
        /// <summary>
        /// 此方法的作用: 提高效率,在线程中 共用一个 DBSession 对象!
        /// </summary>
        /// <returns></returns>
        public IDBSession GetDBSession()
        {
            //从当前线程中 获取 DBContext 数据仓储 对象
            IDBSession dbSesion = CallContext.GetData(typeof(DBSessionFactory).Name) as DBSession;
            if (dbSesion == null)
            {
                dbSesion = new DBSession();
                CallContext.SetData(typeof(DBSessionFactory).Name, dbSesion);
            }
            return dbSesion;
        }
    }
}

四 、同样,大家再来创造2个左右文工厂,就算现在有多少个数据库上下文,也可以很好的支撑。

IDAL项目中,新建IDBContextFactory.cs接口

using System.Data.Entity;

namespace IDAL
{
    /// <summary>
    /// EF数据上下文 工厂
    /// </summary>
   public interface IDBContextFactory
    {
       /// <summary>
        /// 获取 EF 上下文对象
       /// </summary>
       /// <returns></returns>
       DbContext GetDbContext();
    }

DAL项目中新建DBContextFactory类继承IDBContextFactory接口

using System.Data.Entity;
using System.Runtime.Remoting.Messaging;
using Model;

namespace DAL
{
    public class DBContextFactory : IDBContextFactory
    {
        #region 创建 EF上下文 对象,在线程中共享 一个 上下文对象 + DbContext GetDbContext()
        /// <summary>
        /// 创建 EF上下文 对象,在线程中共享 一个 上下文对象
        /// </summary>
        /// <returns></returns>
        public DbContext GetDbContext()
        {
            ////从当前线程中 获取 EF上下文对象
            var dbContext = CallContext.GetData(typeof(DBContextFactory).Name) as DbContext;
            if (dbContext == null)
            {
                dbContext = new OAEntities();
                CallContext.SetData(typeof(DBContextFactory).Name, dbContext);
            }
            return dbContext;
        }
        #endregion
    }
}

⑤ 、Common项目中,添加ConfigurationHelper.cs来操作配置文件

using System;
using System.Configuration;

namespace Common
{
    public static class ConfigurationHelper
    {
        public static string AppSetting(string key)
        {
            return ConfigurationManager.AppSettings[key];
        }
    }
}

Web.config中添加如下配置节点:

    <add key="DBSessionFatory" value="DAL.DBSessionFactory" />
    <add key="DBSessionFatoryDLL" value="E:\WorkSpace\Study\Webs\MVC\OAsln\Web\bin\DAL.dll" />

六 、修改BaseBLL类的调用格局,添加如下代码:

        /// <summary>
        /// 2.0 数据仓储接口(相当于数据层工厂,可以创建所有的数据子类对象)
        /// </summary>
        private IDAL.IDBSession iDbSession;

        #region 数据仓储 属性 + IDBSession DBSession
        /// <summary>
        /// 数据仓储 属性
        /// </summary>
        public IDAL.IDBSession DBSession
        {
            get
            {
                if (iDbSession == null)
                {
                    //1.读取配置文件
                    string strFactoryDLL = Common.ConfigurationHelper.AppSetting("DBSessionFatoryDLL");
                    string strFactoryType = Common.ConfigurationHelper.AppSetting("DBSessionFatory");
                    //2.1通过反射创建 DBSessionFactory 工厂对象
                    Assembly dalDLL = Assembly.LoadFrom(strFactoryDLL);
                    Type typeDBSessionFatory = dalDLL.GetType(strFactoryType);
                    IDAL.IDBSessionFactory sessionFactory = Activator.CreateInstance(typeDBSessionFatory) as IDAL.IDBSessionFactory;
                    //2.2根据配置文件内容 使用 DI层里的Spring.Net 创建 DBSessionFactory 工厂对象


                    //3.通过 工厂 创建 DBSession对象
                    iDbSession = sessionFactory.GetDBSession();
                }
                return iDbSession;
            }
        }
        #endregion

 在那边,使用到了工厂来创造对象,后边引入了Spring.net之后,会回过头来优化现有的代码。项目中选择到了不少接口,目标是为着解耦,每三个项目标任务尽量让其单一,业务层只让其调用数据层接口,也是为着借助于肤浅,而不是具体。每二个框架其实都是种种设计方式的多少个聚众,设计形式是为着消除一类题材,而框架正是为了消除一密密麻麻题材了。到将来截止,整个项指标雏形已经出去了,可是后续,大家一步一步来优化,好的框架不是弹指间就能设计得周全的,而是能够不断的抱抱修改,可不止扩大,不断创新出来的。