簡體   English   中英

實體框架核心DbContextOptionsBuilder.UseModel創建沒有屬性的EntityType。

[英]Entity Framework Core DbContextOptionsBuilder.UseModel creates EntityTypes that have no properties

我正在使用實體框架核心(2.0.1)進行.NET Core項目。

我有一個插件架構,需要根據所連接的插件來加載不同的模型,因此在使用DbContextOptionsBuilder.UseModel方法將dbcontext添加到DI容器時,嘗試動態加載模型。

無論我定義新的Model還是ModelBuilder,我添加的EntityType似乎都無法正確執行,並且一旦添加到dbcontext中,就似乎沒有任何屬性。

我不確定是否需要添加一個約定才能使它正常工作,或者我可能會丟失什么約定。 任何幫助,將不勝感激。

_services.AddDbContext<DataContext>(options =>
        {
            switch (_config.DatabaseType.ToLower())
            {
                case "postgres":
                    options.UseNpgsql(_config.ConnectionString);
                    break;
                case "sqlserver":
                    options.UseSqlServer(_config.ConnectionString);
                    break;
            }

            var convention = new Microsoft.EntityFrameworkCore.Metadata.Conventions.ConventionSet();
            var mb = new ModelBuilder(convention);
            foreach (var definition in definitionList)
            {
                mb.Entity(definition.Type);
            }
            options.UseModel(mb.Model);
        });

解決:

在此處輸入圖片說明

正確創建5個EntityType,但是一旦我展開其中一個Entity Type,它就沒有屬性。

在此處輸入圖片說明

如果我使用通過dbcontext onmodelbuilding的覆蓋添加EntityType的標准約定進行相同的操作,則所有屬性都正確存在...

是的, 默認情況下有一些約定 ,其中之一是PropertyDiscoveryConvention ,聽起來像可以確保默認添加所有屬性,還有其他可能重要的KeyDiscoveryConvention ,例如KeyDiscoveryConvention ,還有許多約定可以幫助您識別映射屬性。

您可能可以確保創建正確的約定,但是將邏輯移到數據庫上下文中可能會更容易。 這樣,您可以像通常那樣在所有標准約定的基礎構建,並且您無需自己照顧。 所以也許是這樣的:

class MyContext : DbContext
{
    private readonly IDbContextConfigurator _dbContextConfigurator;
    public MyContext(DbOptions<MyContext> dbOptions, IDbContextConfigurator dbContextConfigurator)
        : base(dbOptions)
    {
        _dbContextConfigurator = dbContextConfigurator;
    }


    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        _dbContextConfigurator.Configure(modelBuilder);
    }
}

因此,您可以在該IDbContextConfigurator內部檢索配置並直接在模型構建器上配置模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM