gpt4 book ai didi

entity-framework - 在 Entity Framework 中,是否可以将列自动映射到实体属性? ID => [表名]ID

转载 作者:行者123 更新时间:2023-12-01 08:19:34 24 4
gpt4 key购买 nike

我想在我的实体类中使用 .Id 作为唯一 ID,但我们的 dba 想要数据库表中的 [tablename]Id。有没有一种方法可以让 Entity Framework 自动进行此映射,而无需为每个实体创建一个新的映射文件?

最佳答案

只要我对你的理解正确,你就有这样的东西:

public class Foo
{
public Int32 ID { get; set; }
// ...
}
public class Bar
{
public Int32 ID { get; set; }
// ...
}

而且,无需太多努力(或创建多个 entityTypeConfiguration<T> 模型),您会希望获得以下结果:

Current Mapping                  Desired Mapping

[Foo] [Foo]
ID FooID
... ...
[Bar] [Bar]
ID BarID
... ...

为此,存在一些方法(并且取决于您使用的 EF 版本)。话虽如此,一些平易近人的策略:

列属性

您可以访问每个实体模型并使用 ColumnAttribute 修饰 ID 属性.这告诉 EF,尽管 我们 为该列命名,但我们希望其他 成为数据库中的名称。例如

public class Foo
{
[Column("FooID")]
public Int32 ID { get; set; }
// ...
}
public class Foo
{
[Column("BarID")]
public Int32 ID { get; set; }
// ...
}

这里唯一的问题是您现在要转到每个模型并添加属性。

OnModelCreating & Fluent Mapping

另一种方法是进行映射,但将其全部保存在一个地方。 OnModelCreating事件非常适合这种事情。

public class MyDbContext : DbContext
{
public Dbset<Foo> Foos { get; set; }
public DbSet<Bar> Bars { get; set; }

protected override void OnmodelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Foo>()
.Property(x => x.ID).HasColumnName("FooID");
modelBuilder.Entity<Bar>()
.Property(x => x.ID).HasColumnName("BarID");
}
}

同样,这里的问题是您要为每个实体创建一个配置。

自定义约定

从 EF6 开始,您可以使用使事情变得更容易的自定义约定(包括开发您自己的约定,使 ID = TableNameID )。不幸的是我没有时间写一个例子,但是 docs很有启发性。

关于entity-framework - 在 Entity Framework 中,是否可以将列自动映射到实体属性? ID => [表名]ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18338236/

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