第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

EF Core 2.1 中的動態(tài)數(shù)據(jù)種子遷移生成取決于 DbContext bool-flag

EF Core 2.1 中的動態(tài)數(shù)據(jù)種子遷移生成取決于 DbContext bool-flag

C#
翻翻過去那場雪 2021-09-19 16:12:08
現(xiàn)在的情況您好,我有一個 dotnet 標(biāo)準(zhǔn)庫,我在其中使用EF Core 2.1.1(代碼優(yōu)先方法)訪問持久層。為了創(chuàng)建遷移,我使用了一個單獨(dú)的 dotnet 核心控制臺應(yīng)用程序(在同一個解決方案中),其中包含一個IDesignTimeDbContextFactory<T>實(shí)現(xiàn)。有必要播種一些數(shù)據(jù),我想以一種舒適的方式實(shí)現(xiàn)它,因?yàn)閷聿シN的數(shù)據(jù)將被擴(kuò)展或修改。因此,在實(shí)現(xiàn)中,IEntityTypeConfiguration我使用擴(kuò)展方法.HasData()獲取要播種的對象數(shù)組。該數(shù)組將從一個單獨(dú)的類(TemplateReader),它從 JSON 文件加載對象(將在其中完成擴(kuò)展和修改工作)。因此,可以修改 JSON 文件的內(nèi)容并添加一個新的遷移,該遷移將包含對 Insert ( modelBuilder.InsertData())、Update ( modelBuilder.UpdateData()) 或 Delete ( modelBuilder.DeleteData()) 語句的生成代碼。因?yàn)槲也粫l(fā)送 JSON 文件并且我想避免加載序列化數(shù)據(jù)以進(jìn)行播種和執(zhí)行.HasData(),所以我想使用一個bool將由DbContext構(gòu)造函數(shù)提供的值。如果不需要為遷移(和.HasData())調(diào)用種子,為了避免使用 bool 值,我使用默認(rèn)值 false 實(shí)現(xiàn)了一個重載的構(gòu)造函數(shù)。此外,我不會使用,OnConfiguring因?yàn)槲蚁腱`活設(shè)置DbContextOptions<T> 對象在我的 IoC 容器中或單獨(dú)用于測試。代碼以下代碼包含重命名的變量,以更加匿名地了解項(xiàng)目內(nèi)容,但代表當(dāng)前實(shí)現(xiàn)的邏輯。MyDesignTimeDbContextFactory:public class MyDesignTimeDbContextFactory : IDesignTimeDbContextFactory<MyDbContext>{    public MyDbContext CreateDbContext(string[] args)    {        var connectionString = ConfigurationManager.ConnectionStrings["SqlServer"].ConnectionString;        var contextOptionsBuilder = new DbContextOptionsBuilder<MyDbContext>()            .UseSqlServer(connectionString);        return new MyDbContext(contextOptionsBuilder.Options, true);    }}我的數(shù)據(jù)庫上下文:public sealed class MyDbContext : DbContext{    private readonly bool _shouldSeedData;    public DbSet<Content> Contents { get; set; }    public DbSet<Template> Templates { get; set; }    public MyDbContext(DbContextOptions<MyDbContext> options, bool shouldSeedData = false) :        base(options)    {        ChangeTracker.LazyLoadingEnabled = false;        _shouldSeedData = shouldSeedData;    }    protected override void OnModelCreating(ModelBuilder modelBuilder)    {        modelBuilder.HasDefaultSchema("mySchema");        modelBuilder.ApplyConfiguration(new TemplateTypeConfiguration(_shouldSeedData));        base.OnModelCreating(modelBuilder);    }}
查看完整描述

1 回答

?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個贊

OnModelCreating是不是由基引發(fā)的DbContext構(gòu)造函數(shù)調(diào)用,所以絕對是節(jié)省了傳遞的參數(shù)類成員沒有問題。


在您的具體場景中,OnModelCreating由ChangeTracker在存儲傳遞的參數(shù)之前訪問屬性觸發(fā):


public MyDbContext(DbContextOptions<MyDbContext> options, bool shouldSeedData = false) :

    base(options)

{

    ChangeTracker.LazyLoadingEnabled = false; // <--


    _shouldSeedData = shouldSeedData;

}

只需更換線路即可解決問題。通常,在訪問任何上下文屬性之前始終初始化您的類成員。


查看完整回答
反對 回復(fù) 2021-09-19
  • 1 回答
  • 0 關(guān)注
  • 276 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號