我們如何在Entity Framework 7上配置約定?


在EF7之前,我使用下面的snipet刪除約定:

protected override void OnModelCreating(DbModelBuilder builder)
{
      builder.Conventions.Remove<NavigationPropertyNameForeignKeyDiscoveryConvention>();
      builder.Conventions.Remove<PrimaryKeyNameForeignKeyDiscoveryConvention>();
      builder.Conventions.Remove<PluralizingTableNameConvention>();
      builder.Conventions.Remove<PrimaryKeyNameForeignKeyDiscoveryConvention>();
      builder.Conventions.Remove<TypeNameForeignKeyDiscoveryConvention>();
}

我們如何在Entity Framework 7上實現相同的結果?

一般承認的答案

約定的API目前不穩定。請參閱https://github.com/aspnet/EntityFramework/issues/2589

它可以完成,但它需要使用依賴注入來覆蓋在上下文中調用OnModelCreating的內部工作方式。 DbContext使用依賴注入來查找ModelSource的實例,該實例提供模型構建器(和約定)。

要覆蓋模型源,請將您自己的實現添加到依賴項注入中:

    var serviceCollection = new ServiceCollection();
    serviceCollection
        .AddEntityFramework()
        .AddSqlServer();
    serviceCollection.AddSingleton<SqlServerModelSource, MyModelSource>();
    var serviceProvider = serviceCollection.BuildServiceProvider();

    using(var context = new MyContext(serviceProvider))
    {
        // ...
    }

您的MyModelSource實現應該重寫ModelSource.CreateConventionSet() 。在這裡查看原始來源





許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因