当前位置: 网学 > 编程文档 > 其他类别 > 正文

线程共享的DbContext与私有的DbContext

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/12
体领域数据对象创建时代码如下:

  1. /// <summary>  
  2.      /// XXB数据库基类  
  3.      /// </summary>  
  4.      public class XXB_DataBase : DataBase  
  5.      {  
  6.          private readonly static string _conn;  
  7.          static XXB_DataBase()  
  8.          {  
  9.              if (ConfigurationManager.ConnectionStrings["XXB"] == null)  
  10.                  throw new Exception("请设置XXB配置字符");  
  11.              else 
  12.                  _conn = ConfigurationManager.ConnectionStrings["XXB"].ToString();  
  13.          }  
  14.          public XXB_DataBase()  
  15.              : base(DbFactory.Intance(_conn, 21))  
  16.          { }  
  17.    
  18.      } 

二 私有的DbContext,它要求你为每个表都建立一个repository对象,用户对表进行CURD操作,而它们都继承一个database,在 database里有唯一创建datacontext的入口,这样在做多表关联时,使用的是同一个datacontext对象,所以不会出现“不能实现不同数据上下文件的引用”这种问题,但这样方式感觉很不爽,因为你必须把所有多表关联的业务逻辑,写在DAL层,这是很郁闷的,因为一般我们会把它放在BLL层(更有利于业务的组合与重用)。

代码:

具体领域数据基类:

  1. /// <summary>  
  2.      /// XXB数据基类  
  3.      /// </summary>  
  4.      public abstract class XXBBase : DataBase  
  5.      {  
  6.          public XXBBase()  
  7.              : base(new LINQ.DataClasses1DataContext(System.Configuration.ConfigurationManager.ConnectionStrings["XXB"].ToString()))  
  8.          { }  
  9.      } 

统一数据基类:

  1. /// <summary>  
  2.      /// 标准数据操作基类  
  3.      /// </summary>  
  4.      public abstract class DataBase : IRepository  
  5.      {  
  6.          /// <summary>  
  7.          /// 数据访问对象(只对子类可见)  
  8.          /// </summary>  
  9.          protected DataContext DB;  
  10.    
  11.          #region Constructors  
  12.          public DataBase(DataContext db)  
  13.              : this(() => { return db; })  
  14.          { }  
  15.          public DataBase(Func<DataContext> func)  
  16.          {  
  17.              this.DB = func();  
  18.          }  
  19.          #endregion  
  20.    
  21.          #region DBContext SubmitChanges  
  22.          /// <summary>  
  23.          /// XXB默认提交【重写时候可能需要写入自定义的类似约束的逻辑】  
  24.          /// </summary>  
  25.          protected virtual void SubmitChanges()  
  26.          {  
  27.              ChangeSet cSet = DB.GetChangeSet();  
  28.              if (cSet.Inserts.Count > 0 
  29.                  || cSet.Updates.Count > 0 
  30.                  || cSet.Deletes.Count > 0)  
  31.              {  
  32.                  try 
  33.                  {  
  34.                      DB.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);  
  35.                  }  
  36.                  catch (System.Data.Linq.ChangeConflictException)  
  37.                  {  
  38.                      foreach (System.Data.Linq.ObjectChangeConflict occ in DB.ChangeConflicts)  
  39.                      {  
  40.                          occ.Resolve(System.Data.Linq.RefreshMode.OverwriteCurrentValues);  
  41.                          occ.Resolve(System.Data.Linq.RefreshMode.KeepCurrentValues);  
  42.                          occ.Resolve(System.Data.Linq.RefreshMode.KeepChanges);  
  43.                      }  
  44.                      DB.SubmitChanges();  
  45.                  }  
  46.              }  
  47.          }  
  48.    
  49.          #endregion  
  50.    
  51.          #region IRepository 成员  
  52.    
  53.          public virtual void Update<TEntity>(TEntity entity) where TEntity : class 
  54.          {  
  55.              this.SubmitChanges();  
  56.    
  57.          }  
  58.    
  59.          public virtual void Update<TEntity>(IEnumerable<TEntity> list) where TEntity : class 
  60.          {  
  61.              list.ToList().ForEach(entity =>  
  62.              {  
  63.                  this.Update<TEntity>(entity);  
  64.              });  
  65.          }  
  66.    
  67.          public virtual void Insert<TEntity>(TEntity entity) where TEntity : class 
  68.          {  
  69.              DB.GetTable<TEntity>().InsertOnSubmit(entity);  
  70.              this.SubmitChanges();  
  71.          }  
  72.    
  73.          public virtual void Insert<TEntity>(IEnumerable<TEntity> list) where TEntity : class 
  74.          {  
  75.              DB.GetTable<TEntity>().InsertAllOnSubmit<TEntity>(list);  
  76.              this.SubmitChanges();  
  77.          }  
  78.    
  79.          public virtual TEntity InsertGetIDENTITY<TEntity>(TEntity entity) where TEntity : class 
  80.          {  
  81.              this.Insert<TEntity>(entity);  
  82.              return GetModel<TEntity>(i => i == entity).FirstOrDefault();  
  83.          }  
  84.    
  85.          public virtual void Delete<TEntity>(TEntity entity) where TEntity : class 
  86.          {  
  87.              DB.GetTable<TEntity>().DeleteOnSubmit(entity);  
  88.              this.SubmitChanges();  
  89.          }  
  90.    
  91.          public virtual void Delete<TEntity>(IEnumerable<TEntity> list) where TEntity : class 
  92.          {  
  93.              DB.GetTable<TEntity>().DeleteAllOnSubmit<TEntity>(list);  
  94.              this.SubmitChanges();  
  95.          }  
  96.    
  97.          public virtual IQueryable<TEntity> GetModel<TEntity>() where TEntity : class 
  98.          {  
  99.              return this.DB.GetTable<TEntity>();  
  100.          }  
  101.    
  102.          public virtual IQueryable<TEntity> GetModel<TEntity>(System.Linq.Expressions.Expression<Func<TEntity, bool>> predicate) where TEntity : class 
  103.          {  
  104.              return GetModel<TEntity>().Where(predicate);  
  105.          }  
  106.    
  107.          public virtual TEntity Find<TEntity>(params object[] keyValues) where TEntity : class 
  108.          {  
  109.              var mapping = DB.Mapping.GetTable(typeof(TEntity));  
  110.              var keys = mapping.RowType.IdentityMembers.Select((m, i) => m.Name + " = @" + i).ToArray();  
  111.              TEntity entityTEntity = DB.GetTable<TEntity>().Where(String.Join(" && ", keys), keyValues).FirstOrDefault();  
  112.              if (entityTEntity != null)  
  113.                  DB.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, entityTEntity);  
  114.              return entityTEntity;  
  115.          }  
  116.    
  117.          #endregion  
  118.      } 

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号