天天看點

将IRepository接口進行抽象,使它成為資料基類的一個對象,這樣每個子類都可以有自己的最基礎的CURD了

  /// <summary>

    /// 資料操作基類

    /// </summary>

    public abstract class TESTRepositoryBase

    {

        /// <summary>

        /// 資料庫基類

        /// </summary>

        protected Entity.TEST.LinqTESTDataContext db = (Entity.TEST.LinqTESTDataContext)DbFactory.Intance("TEST", System.Threading.Thread.CurrentThread);

        /// 統一送出動作

        protected virtual void SubmitChanges()

        {

            ChangeSet cSet = db.GetChangeSet();

            if (cSet.Inserts.Count > 0

                || cSet.Updates.Count > 0

                || cSet.Deletes.Count > 0)

            {

                try

                {

                    db.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);

                }

                catch (System.Data.Linq.ChangeConflictException ex)

                    foreach (System.Data.Linq.ObjectChangeConflict occ in db.ChangeConflicts)

                    {

                        // 使用目前資料庫中的值,覆寫Linq緩存中實體對象的值  

                        occ.Resolve(System.Data.Linq.RefreshMode.OverwriteCurrentValues);

                        // 使用Linq緩存中實體對象的值,覆寫目前資料庫中的值  

                        occ.Resolve(System.Data.Linq.RefreshMode.KeepCurrentValues);

                        // 隻更新實體對象中改變的字段的值,其他的保留不變  

                        occ.Resolve(System.Data.Linq.RefreshMode.KeepChanges);

                    }

                    db.SubmitChanges();

            }

        }

        /// 資料統一接口方法

        /// 子類可以通過本方法,對指定類型進行CURD操作

        /// <typeparam name="TEntity"></typeparam>

        /// <returns></returns>

        protected virtual IRepository<TEntity> Repository<TEntity>() where TEntity : class,IEntity

            return new Repository<TEntity>();

    }