天天看點

MVC+LINQToSQL的Repository模式之(二)資料基類

namespace Data.TEST

{

    /// <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();

            }

        }

    }

}