首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置实体框架7上的约定?

如何配置实体框架7上的约定?
EN

Stack Overflow用户
提问于 2015-09-12 05:49:09
回答 1查看 2.4K关注 0票数 6

在EF7之前,我使用下面的代码段删除约定:

代码语言:javascript
复制
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上实现相同的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-14 22:14:01

用于约定的API目前并不稳定。见https://github.com/aspnet/EntityFramework/issues/2589

这是可以完成的,但它需要使用依赖项注入来覆盖上下文中调用OnModelCreating的内部工作方式。DbContext使用依赖注入来查找ModelSource的一个实例,该实例提供了模型构建器(和约定)。

若要重写模型源,请将自己的实现添加到依赖项注入中:

代码语言:javascript
复制
    var serviceCollection = new ServiceCollection();
    serviceCollection
        .AddEntityFramework()
        .AddSqlServer();
    serviceCollection.AddSingleton<SqlServerModelSource, MyModelSource>();
    var serviceProvider = serviceCollection.BuildServiceProvider();

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

MyModelSource的实现应该覆盖ModelSource.CreateConventionSet()。见原源在此

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32535626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档