c# - 什么约定将 poco 属性自动映射到列?我怎样才能禁用该自动映射?

标签 c# .net entity-framework ef-code-first entity-framework-6

我有现有的 poco 模型和我想与 EF 6 一起使用的现有数据库。但是,我的许多模型具有不映射到数据库中的列的属性。当 EF 向 sql 发送一个 select 语句时,它会询问这些属性,就像它们是列一样,但由于这些列不存在,EF 最终会抛出“无效的列名”异常。

EF 6 中是否有约定将所有 poco 属性视为列类型?如果是这样,哪个公约对此负责?如果不是,还有什么其他机制导致此行为,我该如何禁用它?

理想情况下,如果我像这样在 EntityTypeConfiguration 中显式映射它,我希望我的实现只将 poco 属性视为数据库中的一个列:

public class MyPocoMap : EntityTypeConfiguration<Authorization>
{
    public MyPocoMap()
    {
        this.Property(t => t.MyPropName).HasColumnName("MyColumnName");
    }
}

并且不必为我希望 EF 映射的所有属性执行此操作:

this.Ignore(t => t.MyPropName);

这是我如何进行映射的示例。我想找到一种方法来禁用 NotColumn1 和 NotColumn2 属性的映射,而无需显式使用流畅的 API 来忽略这些属性中的每一个。

public class MyContext : DbContext
{
    static MyContext()
    {
        Database.SetInitializer<MyContext>(null);
    }

    public MyContext()
        : base("Name=MyContext")
    {
    }

    public DbSet<MyModel> MyModels { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new MyModelMap());
    }
}

public class MyModel
{
    public int CustomId { get; set; }
    public string MyColumn1 { get; set; }
    public string MyColumn2 { get; set; }
    public string NotColumn1 { get; set; }
    public string NotColumn2 { get; set; }
}

public class MyModelMap : EntityTypeConfiguration<MyModel>
{
    public MyModelMap()
    {
        this.ToTable("MyTable");
        this.HasKey(t => t.CustomId);
        this.Property(t => t.MyColumn1).HasColumnName("Column1Name");
        this.Property(t => t.MyColumn2).HasColumnName("Column2Name");
        this.Ignore(t => t.NotColumn1);
        this.Ignore(t => t.NotColumn2);
    }
}

最佳答案

EF6 中,您可以使用以下自定义约定代码:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Properties() 
                .Where(p => p.Name == "SomePropertyName") 
                .Configure(p => p.Ignore()); 
} 

您可以在此 address 找到更多关于 EF6 的自定义代码对话

关于c# - 什么约定将 poco 属性自动映射到列?我怎样才能禁用该自动映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26289755/

相关文章:

.net - 使用 NancyFX 进行模型验证

c# - 是否可以在调用 DbContext.SaveChanges 之前查询 Entity Framework ?

c# - 是否可以使用循环引用执行序列化?

c# - 有没有像 "user-defined encoding fallback"这样的东西

c# - 将转换器从 dll 导入 XAML

c# - 编写每行最多两个标签的 xml

.net - 您将如何在 .NET 中实现这个 "WorkerChain"功能?

asp.net-mvc - Entity Framework "Migrations Configuration"和 autofac

.net - 具有长期运行对象上下文的 Entity Framework

c# - WCF 性能