gpt4 book ai didi

c# - Entity Framework 一对多 TPH 映射

转载 作者:行者123 更新时间:2023-11-30 13:01:04 24 4
gpt4 key购买 nike

我使用的数据结构与此类似,其中动物类型由表中的鉴别器列确定:

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

public virtual ICollection<Pig> Pigs { get; set; }

public virtual ICollection<Cow> Cows { get; set; }
}

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

public int FarmId? { get; set; }

public virtual Farm Farm { get; set; }

public string Name { get; set; }
}

public class Pig : Animal {}
public class Cow : Animal {}

映射:

this.Map<Pig>(m => m.Requires("Type").HasValue((int) AnimalType.Pig));
this.Map<Cow>(m => m.Requires("Type").HasValue((int) AnimalType.Cow));

但我似乎无法描绘出 pig 、牛和农场之间的关系。我已经从 FarmMap 尝试了这个,它给出了重复的列映射错误:

this.HasMany(t => t.Pigs)
.WithOptional(t => t.Farm)
.Map(m => m.MapKey("FarmId"));
this.HasMany(t => t.Cows)
.WithOptional(t => t.Farm)
.Map(m => m.MapKey("FarmId"));

每个动物的映射也不起作用,它会生成额外的列(例如 Farm_IdFarm_Id1 - 除了 FarmId - 每种动物类型一个)。

this.HasOptional(t => t.Farm)
.WithMany(t => t.Pigs)
.HasForeignKey(d => d.FarmId)

将导航属性从 Animal 模型移动到继承模型会导致生成一个额外的列 - FarmId1(比我想要的更接近超过 2 个!)

有什么办法可以实现吗?

最佳答案

我不是 EF 专家,但从模型优先方法我知道这将被映射为 Animal 的集合,然后您可以选择 Farm.Animals.OfType<Pig>()

关于c# - Entity Framework 一对多 TPH 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20677438/

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