gpt4 book ai didi

entity-framework - 复杂类型的 Entity Framework 列映射

转载 作者:行者123 更新时间:2023-12-03 01:57:06 25 4
gpt4 key购买 nike

我有复杂类型类..这是层次结构

 public class Item 
{
public virtual Summary Summary { get; set; }
}

public class Summary
{
public int Id { get; set; }

[Key, ForeignKey("Item")]
public int ItemId { get; set; }

public virtual Item Item { get; set; }

public virtual ClaimSummary Cost { get; set; }
}

[ComplexType]
public class ClaimSummary
{
public virtual decimal? SparePartsCost { get; set; }

public virtual decimal? LaborHours { get; set; }
.....
}

当我将项目保存到数据库中时,SQL 探查器显示它需要列名称作为 Cost_SparePartsCost,其中我的数据库的列名称为 SparePartsCost。我故意以这种方式创建数据库列名称,因为我不希望名称之间有“_”。

如何让 Entity Framework 知道列的映射方式将忽略其默认映射并遵循自定义映射?

最佳答案

您可以通过多种方式覆盖默认的 EF 复杂类型列名称约定。

如果您想避免在所有使用复杂类型的实体中使用前缀,您可以使用任一数据注释(Column 属性):

[ComplexType]
public class ClaimSummary
{
[Column("SparePartsCost")]
public virtual decimal? SparePartsCost { get; set; }

[Column("LaborHours")]
public virtual decimal? LaborHours { get; set; }

// ...
}

或流畅的配置:

modelBuilder.ComplexType<ClaimSummary>()
.Property(e => e.SparePartsCost).HasColumnName("SparePartsCost");
modelBuilder.ComplexType<ClaimSummary>()
.Property(e => e.LaborHours).HasColumnName("LaborHours");

如果您只想覆盖某些实体的默认约定(例如您的Summary),那么您可以在实体级别使用流畅的配置,如下所示:

modelBuilder.Entity<Summary>()
.Property(e => e.Cost.SparePartsCost).HasColumnName("SparePartsCost");
modelBuilder.Entity<Summary>()
.Property(e => e.Cost.LaborHours).HasColumnName("LaborHours");

引用:Associations in EF Code First: Part 2 – Complex Types

关于entity-framework - 复杂类型的 Entity Framework 列映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46183641/

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