EF一到多的外键无子的导航性能(EF One-to-many Foreign Keys withou

2019-07-30 06:57发布

利用二维码的第一个实体框架和.NET 4,我试图创造孩子父母之间的一个一对多的关系:

public class Parent
{
    [Key]
    public int ParentId { get; set; }
    [Required]
    public string ParentName { get; set; }
    public IEnumerable<Child> Children { get; set; }
}

public class Child
{
    [Key]
    public int ChildId { get;  set; }
    [ForeignKey]
    public int ParentId { get; set; }
    [Required]
    public string ChildName { get; set; }
}

正如指出的在这里 ,为了外键关系进行到数据库中,实际的对象必须被链接,而不只是它们的ID。 如果孩子包含对其父(参考正常的方式做到这一点例子 )。

但我怎么强制执行我的实现,这是周围的其他方式(父母子女引用)外键?

Answer 1:

首先:您不能使用IEnumerable<T>的集合导航属性。 EF会忽略这个属性。 使用ICollection<T>代替。

当你已经改变了这一点,在你的具体的例子,你不需要做任何事情,因为外键的属性名称后面的约定(主键的名称ParentId中主要实体Parent ),使EF会检测到需要一个一对多关系ParentChild自动。

如果你有其他“非常规” FK属性名你仍然可以定义具有流利的API这样的映射,例如:

public class Child
{
    [Key]
    public int ChildId { get;  set; }

    public int SomeOtherId { get; set; }

    [Required]
    public string ChildName { get; set; }
}

制图:

modelBuilder.Entity<Parent>()
    .HasMany(p => p.Children)
    .WithRequired()
    .HasForeignKey(c => c.SomeOtherId);

至于我可以告诉它是不可能的定义与数据注解了这种关系。 所述的使用[ForeignKey]属性需要在从属实体,其中外键属性是一个导航属性。



文章来源: EF One-to-many Foreign Keys without child navigation properties