gpt4 book ai didi

c# - 如何将子类属性映射到每个层次结构的表中的列?

转载 作者:行者123 更新时间:2023-11-30 17:16:30 26 4
gpt4 key购买 nike

注意:我认为这在技术上仍然是代码优先,但我也有一个现有的数据库,所以我不会即时生成模型或数据库(没有 .edmx)。

我有一个 TPH 情况,其中子类具有特定于它们的字段。我为基类定义了一个 EntityTypeConfiguration如何将特定于子类的字段映射到我的数据库表中的列?

public class Letter
{
public string Name { get; set; }
}

public class A : Letter
{
public int quantity { get; set; }
}

public class B : Letter
{
public ComplexType description { get; set; }
}



public class LetterMap : EntityTypeConfiguration<Letter>
{
HasKey...
}

这是 EF 4.1。

编辑:

我已经实现了 Eranga 建议的解决方案 below .我现在的问题是两个子类将不同的值映射到同一列。 (第三个子类根本不填充该列,这就是为什么我可以将该属性上移一个级别)。

(590,6) : error 0019: Each property name in a type must be unique. Property name 'Description_Title' was already defined.

例如:

B.description.title 映射到“Description_Title”列

同时

C.description.shortTitle 映射到同一列

最佳答案

使 Letter 类抽象

public abstract class Letter
{
public string Name { get; set; }
}

public class LetterMap : EntityTypeConfiguration<Letter>
{
public LetterMap()
{
HasKey(l => l.Id);

//assuming discriminator column is "Type"
Map<A>(a => a.Requires("Type").HasValue<byte>(1));
Map<B>(b => b.Requires("Type").HasValue<byte>(2));
}
}

public class BMap : EntityTypeConfiguration<B>
{
public LetterMap()
{
HasOptional(b => b.description)
WithMany()
HasForeignKey(b=> b.descriptionId);
}
}

关于c# - 如何将子类属性映射到每个层次结构的表中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7231173/

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