我有两张桌子:
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 : Child
和Child2 : Child
,这是否可行?
答案 0 :(得分:0)
虽然我确定它可以拥有动态ChildN
类型/属性,但我会采用不同的方法。这就是我要提出的建议。
我认为在您的情况下,让Parent
引用一组子项更有意义,而不是显式拥有Child1
,Child2
,...,{的属性{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个孩子取决于你。