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

DotNetCore跨平臺(tai)~EFCore數據上(shang)下(xia)文的創建方式

回到目錄

對于DotNetCore來說,把大部分組件者放在(zai)DI容器里,在(zai)startup中進行注入,在(zai)類的構(gou)造方法中進行使(shi)用,如(ru)果(guo)某些情況下(xia),無法使(shi)用這種DI的方式(shi),也可以自己控制(zhi)數(shu)據上(shang)下(xia)文的生產過程,下(xia)面說一(yi)下(xia)。

一 標(biao)準(zhun)注入+構造方法(fa)使用

數(shu)據上下(xia)文(wen)的(de)定義,帶參數(shu)的(de)構(gou)造方法,注意(yi)他和(he)使用什么類(lei)型的(de)數(shu)據庫沒(mei)有(you)關系,只是(shi)單純的(de)上下(xia)文(wen)

   public partial class ErpContext : DbContext, IERPContext
    {
        public ErpContext(DbContextOptions dbContextOptions) : base(dbContextOptions)
        { }
   }

startup類中去注(zhu)入指定(ding)的(de)數(shu)(shu)(shu)據(ju)源和數(shu)(shu)(shu)據(ju)庫(ku)連接串(chuan),注(zhu)意在這里就有了數(shu)(shu)(shu)據(ju)庫(ku)類型(如(ru)sqlserver,mysql,sqllite)和數(shu)(shu)(shu)據(ju)連接串(chuan)

            services.AddDbContextPool<ErpContext>(
                options => options.UseMySql("Server=123.56.31.133;DataBase=erp;UID=front;Password=PlP2017_#Test;charset=utf8;port=3306;SslMode=None"));

而對于使用者來說,就(jiu)是(shi)某個控制器(qi)上,也是(shi)通過構造(zao)方(fang)法的(de)(de)DI來實現的(de)(de),事實上dotnetcore把ioc&di這些模式都(dou)集成(cheng)了

 public ValuesController(ErpContext context)
 {
            this.context = context;
 }

二 不使用注入,直接建立數據(ju)上下文(wen),手動建立DbContextOptions對象(xiang)

這種類似于傳(chuan)統的方法(fa),數據(ju)上下文對象里固定連(lian)接串,即(ji)某(mou)個(ge)上下文只屬于某(mou)個(ge)數據(ju)庫!

 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseMySql("Server=123.56.31.133;DataBase=erp;UID=front;Password=PlP2017_#Test;charset=utf8;port=3306;SslMode=None");
            base.OnConfiguring(optionsBuilder);
        }

三(san) 還有一(yi)種(zhong)就(jiu)是,即(ji)使用(yong)(yong)注入(ru),也使用(yong)(yong)自動構造的(de)方(fang)式來建立數據上下文

事實上就是在初始化上下文時,把optionsBuilder做為參數傳(chuan)進來,這個比較靈活

 public class ERPRepository<T> : EFRepository<T> where T : class
    {
         public ERPRepository() : base(new ErpContext(
            new DbContextOptionsBuilder().UseMySql("Server=123.56.31.133;DataBase=erp;UID=front;Password=PlP2017_#Test;charset=utf8;port=3306;SslMode=None").Options))
        { }
    }

以上幾種方式就是我們使用數據上下文時的方法,還有一點要說話的,當使用了Pomelo.EntityFrameworkCore.MySql這(zhe)個包包之后,請觀察一(yi)下(xia)代碼(ma)的(de)性能,主(zhu)要表現在linq的(de)一(yi)對多查詢上,代碼(ma)如下(xia):

       //一對多,效率很低
            var linq2 = from data1 in crm_customers.GetModel()
                        join data2 in crm_customertag.GetModel()
                        on data1.Id equals data2.CustomerId into list
                        select new
                        {
                            name = data1.AccountantName,
                            orders = list,
                        };

            var result2 = linq2.Take(10).ToList();

感謝各位的閱讀!

我們(men)下(xia)次將對(dui)一些性(xing)能存(cun)在問題的代碼進行改善!

回到目錄

 

posted @ 2017-08-22 16:33  張占嶺  閱讀(3995)  評論(2)    收藏  舉報