C# EF没有子导航属性的一对多外键

C# EF没有子导航属性的一对多外键,c#,entity-framework,foreign-keys,code-first,C#,Entity Framework,Foreign Keys,Code First,使用代码优先实体框架和.NET 4,我试图在父母与子女之间创建一对多关系: 公共类父类 { [关键] public int ParentId{get;set;} [必需] 公共字符串ParentName{get;set;} 公共IEnumerable子项{get;set;} } 公营儿童 { [关键] public int ChildId{get;set;} [外键] public int ParentId{get;set;} [必需] 公共字符串ChildName{get;set;} } 如

使用代码优先实体框架和.NET 4,我试图在父母与子女之间创建一对多关系:

公共类父类
{
[关键]
public int ParentId{get;set;}
[必需]
公共字符串ParentName{get;set;}
公共IEnumerable子项{get;set;}
}
公营儿童
{
[关键]
public int ChildId{get;set;}
[外键]
public int ParentId{get;set;}
[必需]
公共字符串ChildName{get;set;}
}
如前所述,为了将外键关系带入数据库,必须链接实际对象,而不仅仅是它们的ID。如果子级包含对其父级()的引用,则通常是这样做的


但是我如何在实现中强制外键,这是另一种方法(父引用子项)?

首先:不能对集合导航属性使用
IEnumerable
。EF将忽略此属性。改用
i收集

在您的特定示例中,如果更改了此项,则不需要执行任何操作,因为外键属性名称遵循约定(主体实体中主键的名称
ParentId
)因此EF将自动检测
父项
子项
之间所需的一对多关系

如果您有另一个“非常规”FK属性名称,您仍然可以使用Fluent 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);
modelBuilder.Entity()
.HasMany(p=>p.Children)
.WithRequired()
.HasForeignKey(c=>c.SomeOtherId);

据我所知,不可能用数据注释定义这种关系。使用
[ForeignKey]
属性需要外键属性所在的从属实体中有一个导航属性。

您的意思是
公共类子级
而不是
公共类地址匹配
,对吗?