.net - EF 4.1,代码优先 : Is there an easy way to remove ALL conventions?

标签 .net entity-framework ef-code-first entity-framework-4.1

我们可以通过这种方式删除单个约定:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Remove<ConcurrencyCheckAttributeConvention>();
// and 31 conventions more

但我想念类似 modelBuilder.Conventions.RemoveAll() 的东西.有没有一种简单的方法可以删除所有这些?

(我什至不确定我是否真的想最终删除所有约定。但是随着我不断增长的对象模型,我很难清楚地区分映射到数据库的哪些部分来自约定以及我确实在 Fluent 中明确配置了哪些部分API。我认为目前我混合了基于纯约定的映射、明确覆盖的约定和明确复制的约定。至少为了学习目的和对映射的清晰理解,能够关闭所有约定会很好。)

最佳答案

我只是用反射创建了一些解决方案:

public class Context : DbContext
{
    private static IList<Type> _types = typeof(IConvention).Assembly.GetTypes()
        .Where(t => !t.IsAbstract && t.IsClass && 
                    typeof(IConvention).IsAssignableFrom(t))
        .ToList();

    private static MethodInfo _method = 
        typeof(ConventionsConfiguration).GetMethod("Remove");

    // DbSets ...

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

        foreach (var type in _types)
        {
            MethodInfo method = _method.MakeGenericMethod(type);
            method.Invoke(modelBuilder.Conventions, null);
        }
    }
}

关于.net - EF 4.1,代码优先 : Is there an easy way to remove ALL conventions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5370518/

相关文章:

.net - 如何编码以在对话中对电子邮件进行分组

.net - WPF 中的 Setter 优先级重写?

c# - 在运行时打印 EntityFramework 版本

c# - Odata DataContext 仅更新修改的属性

unit-testing - Entity Framework 4.1 RC POCO - 对生成的字段名称进行单元测试

.net - 将 POP3 客户端功能集成到 C# 应用程序中?

Java 虚拟机和 CLR

c# - 按列表中的子属性排序

c# - 如何建立这种 EF 关系?

entity-framework - Entity Framework 代码优先 Azure 连接