中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

EF架(jia)構(gou)~Code First構(gou)架(jia)~Data層的(de)實現

回到目錄

EF的(de)(de)Code First開始(shi)模(mo)式時,在設計Data層與Data First模(mo)式稍微有些不同,它主(zhu)要有數(shu)(shu)據(ju)(ju)庫類,數(shu)(shu)據(ju)(ju)庫操(cao)作基類,數(shu)(shu)據(ju)(ju)通(tong)(tong)用操(cao)作接口和數(shu)(shu)據(ju)(ju)通(tong)(tong)過操(cao)作實(shi)現組成,每個類有自己的(de)(de)用途,先(xian)看一下最簡(jian)單的(de)(de)結構:

DataContext是(shi)EF的數據庫(ku)對象類(lei)型,它里面的代(dai)碼構(gou)架了我們(men)的數據表對象

 public class DataContext : DbContext, IDataContext
    {
        #region Properties

        /// <summary>
        /// 得(de)ì?到ì?UserBase結¨¢果?集?¥
        /// </summary>
        public IDbSet<UserBase> UserBases { get; private set; }
        /// <summary>
        /// 得ì?到ì?UserInfo結¨¢果?集?¥
        /// </summary>
        public IDbSet<UserInfo> UserInfos { get; private set; }
        /// <summary>
        /// 得ì?到ì?Category結¨¢果?集?¥
        /// </summary>
        public IDbSet<Category> Categorys { get; private set; }
        #endregion

        #region Constructors
        public DataContext()
            : base(DataContext.GetConnectionString())
        {
            InitDbSets();

        }

        public DataContext(string cs)
            : base(cs)
        {
            InitDbSets();
        }

        #endregion

        #region  Private Methods
        private void InitDbSets()
        {
            UserBases = this.Set<UserBase>();
            UserInfos = this.Set<UserInfo>();
            Categorys = this.Set<Category>();
            Init();//數(shu)oy據Y庫(ku)a與??DBContext依(yi)°¨¤附?方¤?式o? ?
        }

        /// <summary>
        /// 得ì?到ì?數oy據Y連¢?接(jie)¨?串(chuan)??
        /// </summary>
        /// <returns></returns>
        private static string GetConnectionString()
        {
            string conn;
            if (System.Diagnostics.Debugger.IsAttached)
            {
                conn = VConfigs.WebInfoConfig.Get_Config().DevsSqlConn;
            }
            else
            {
                conn = VConfigs.WebInfoConfig.Get_Config().ReleaseSqlConn;
            }
            return conn;
        }
        /// <summary>
        /// 根¨′據Y傳(chuan)??入¨?的(de)ì?類¤¨¤型(xing)¨a,ê?進?行DDBContext出?始o?化(hua)?¥
        /// </summary>
        /// <param name="InitType"></param>
        private static void SetInitializer(InitializerTypes InitType)
        {
            switch (InitType)
            {
                case InitializerTypes.Standard:
                    Database.SetInitializer(new CreateDatabaseIfNotExists<DataContext>());
                    break;
                case InitializerTypes.ReCreateAlways:
                    Database.SetInitializer(new DropCreateDatabaseAlways<DataContext>());
                    break;
                case InitializerTypes.ReCreateByChange:
                    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DataContext>());
                    break;
                default:
                    break;
            }
        }
        /// <summary>
        /// DBContext初?始o?化?¥方¤?法¤?§
        /// </summary>
        private static void Init()
        {
            Database.DefaultConnectionFactory = new SqlConnectionFactory();
            if (System.Diagnostics.Debugger.IsAttached)
            {
                DataContext.SetInitializer(InitializerTypes.ReCreateByChange);
            }
            else
            {
                DataContext.SetInitializer(InitializerTypes.Standard);
            }
        }
        #endregion

        /// <summary>
        /// 數oy據Y庫a建(jian)?§立¢?é時o?à執??行(xing)D
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
 
        }

    }

其中dataBase就是數據庫操作基類,主(zhu)要實現創建(jian)dbcontext對象和(he)對修改進(jin)行統一提(ti)交(jiao)的作用

/// <summary>
    /// 數oy據Y庫a基¨′類(lei)¤¨¤
    /// </summary>
    public abstract class DataBase
    {

        #region 單죤件t模?ê式o?創???建?§一°?個?類¤¨¤對?象¨?

        /// <summary>
        /// 數oy據(ju)Y源(yuan)??對?象(xiang)¨?
        /// </summary>
        private static DataContext _db = null;
        protected static DataContext CreateInstance()
        {
            if (_db == null)
                _db = new DataContext();
            return _db;
        }
        #endregion

        /// <summary>
        /// 數(shu)oy據Y庫a訪¤?問¨o對?象¨?
        /// </summary>
        protected DataContext Db = CreateInstance();
        /// <summary>
        /// 統(tong)a3一°?提?¨¢交(jiao)?動?¥作(zuo)á??
        /// </summary>
        protected virtual void SubmitChanges()
        {
            try
            {
                Db.SaveChanges();
            }
            catch (Exception ex)
            {
                throw;
            }
        }
    }

而數據操(cao)作統一接(jie)口主要實現對(dui)數據庫(ku)的CURD操(cao)作,代碼一般是這樣(與其它(ta)構架大同小異(yi))

 /// <summary>
    /// 通a?§用??數oy據Y庫a訪(fang)¤?問¨o接¨?口¨2
    /// </summary>
    public interface IRepository<TEntity> where TEntity : Entity.BaseEntity
    {
        /// <summary>
        /// 根¨′據Y數oy據Y庫a實o|ì體??-a》?¤更¨1新?記?錄?
        /// </summary>
        /// <param name="entity"></param>
        void Update(TEntity entity);

 
        /// <summary>
        /// 根¨′據(ju)Y數oy據(ju)Y庫(ku)a實o|ì體??-a》?¤[批¨2量¢?]更¨1新?記?錄(lu)?
        /// </summary>
        /// <param name="entity"></param>
        void Update(IList<TEntity> list);

       
        /// <summary>
        /// 根(gen)¨′據Y數oy據Y庫(ku)a實o|ì體??-a》?¤插(cha)?入¨?記?錄?
        /// </summary>
        void Insert(TEntity entity);

        /// <summary>
        /// 根¨′據Y數oy據Y庫(ku)a實o|ì體??-a》?¤[批¨2量¢?]插?入¨?記?錄(lu)?
        /// </summary>
        void Insert(IList<TEntity> list);

        /// <summary>
        /// 根¨′據(ju)Y數(shu)oy據(ju)Y庫a實o|ì體??-a》?¤插?入(ru)¨?記(ji)?錄?并?é返¤|ì回?剛(gang)?剛(gang)?立¢?é即??插?入(ru)¨?的(de)ì?狀á??態??視(shi)o¨?圖a?
        /// </summary>
        TEntity InsertGetIDENTITY(TEntity entity);

        /// <summary>
        /// 根¨′據Y數(shu)oy據Y庫a實o|ì體??-a》?¤多¨¤主??鍵¨1,刪(shan)|?除y有?D多¨¤個?參?數(shu)oy控?制(zhi)?的(de)ì?對?象(xiang)¨?
        /// </summary>
        /// <param name="oArr"></param>
        void Delete(TEntity entity);

        /// <summary>
        /// 返(fan)¤|ì回(hui)?默?認¨?結(jie)¨¢果?集?¥
        /// </summary>
        /// <returns></returns>
        IQueryable<TEntity> GetModel();

        /// <summary>
        /// 根¨′據(ju)Y主(zhu)??鍵¨1返(fan)¤|ì回(hui)?實o|ì體??
        /// </summary>
        /// <returns></returns>
        TEntity GetModelById(int id);

    }

事實(shi)上(shang)我(wo)們真實(shi)的datacontext對(dui)象在實(shi)現開發中只有Data本層(ceng)可(ke)見,而對(dui)于(yu)業(ye)務層(ceng)和UI層(ceng)是不被容許訪(fang)問的,當(dang)然這(zhe)也是保(bao)存原數據對(dui)象及方便(bian)擴展和維護的一種作(zuo)法。

回到目錄

posted @ 2012-03-02 00:05  張占嶺  閱讀(4575)  評論(3)    收藏  舉報