在EF7之前,我使用下面的代码段删除约定:
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>();
}如何在实体框架7上实现相同的结果?
发布于 2015-09-14 22:14:01
用于约定的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()。见原源在此
https://stackoverflow.com/questions/32535626
复制相似问题