Ari*_*iac 11 c# entity-framework foreign-keys code-first
使用代码优先的实体框架和.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; }
}
Run Code Online (Sandbox Code Playgroud)
正如这里所指出的,为了将外键关系带入数据库,必须链接实际对象,而不仅仅是它们的ID.如果子项包含对其父项的引用(示例),则执行此操作的常规方法.
但是,如何在我的实现中强制执行外键,这是另一种方式(父引用子代)?
Sla*_*uma 19
首先:您不能IEnumerable<T>用于集合导航属性.EF将忽略此属性.请ICollection<T>改用.
更改后,在您的特定示例中,您不需要执行任何操作,因为外键属性名称遵循约定(ParentId主体实体中的主键名称Parent),以便EF将检测所需的一对多关系Parent并Child自动.
如果您有另一个"非常规"FK属性名称,您仍然可以使用Fluent API定义这样的映射,例如:
public class Child
{
[Key]
public int ChildId { get; set; }
public int SomeOtherId { get; set; }
[Required]
public string ChildName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
制图:
modelBuilder.Entity<Parent>()
.HasMany(p => p.Children)
.WithRequired()
.HasForeignKey(c => c.SomeOtherId);
Run Code Online (Sandbox Code Playgroud)
据我所知,不可能用数据注释定义这种关系.的的使用[ForeignKey]属性,需要在相关实体,其中外键属性是一个导航属性.
| 归档时间: |
|
| 查看次数: |
9465 次 |
| 最近记录: |