相同类型的两个属性映射到单个表,该表具有用于区分目标属性的列

时间:2014-06-23 13:26:18

标签: entity-framework ef-code-first entity-framework-6

我有两张桌子:

parents
  id

childs
  parent_id
  child_number

和两个相应的实体类型,我希望类型Parent有两个链接到第一个和第二个孩子的导航属性:

class Parent
  property Child1 : Child
  property Child2 : Child

我正在寻找

的内容
modelBuilder.Entity<Parent>()
  .Map(f => f.Child1, m => m.Requires("child_number").HasValue(0))
modelBuilder.Entity<Parent>()
  .Map(f => f.Child2, m => m.Requires("child_number").HasValue(1))

如果没有两个目标派生类型Child1 : ChildChild2 : Child,这是否可行?

1 个答案:

答案 0 :(得分:0)

虽然我确定它可以拥有动态ChildN类型/属性,但我会采用不同的方法。这就是我要提出的建议。

我认为在您的情况下,让Parent引用一组子项更有意义,而不是显式拥有Child1Child2,...,{的属性{1}}。

我认为这不仅可以解决您的问题(或至少满足您的需求),还可以用于未来的扩展。如果你这样做了,你最终会选择第一,第二,......,第n个孩子来处理一个单独的逻辑。

相反,您最终会为父母和子女提供两个POCO

ChildN

Fluent API映射。此Fluent API代码还可以包含[{1}} public class Parent() { public Parent() { Children = new HashSet<Child>(); } [Required] public int Id {get;set}| //Collection of Child objects as navigation property public virtual ICollection<Child> Children{get;set;} } public class Child() { [Required] public int ParentId {get;set} [Required] public int ChildNumber{get;set} //Collection of Child objects as navigation property public virtual Parent Parent {get; set;} } 的[必需]信息,但我更容易将其添加到模型定义中,并且它会拥挤得更多Fluent API的重要映射信息。

Property

检索第N个孩子的一种可能方法

IsRequired()

或者你甚至可以定义你自己的Children类来实现一个Indexer来获得第N个孩子;但你决定如何去找第N个孩子取决于你。