gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:18:40 25 4
gpt4 key购买 nike

我有现有的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com