我很难维护父类和它的孩子之间的多种关系。谁能告诉我为什么我可以在父母中创建两个子引用而不是第三个?以下代码仅在第三个引用被注释掉时才有效。
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
public int Child1Id { get; set; }
public Child Child1 { get; set; }
public int Child2Id { get; set; }
public Child Child2 { get; set; }
//public int Child3Id { get; set; }
public Child Child3 { get; set; }
public ICollection<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
public Parent Parent { get; set; }
}
public class CFContext : DbContext
{
public DbSet<Parent> Parents { get; set; }
public DbSet<Child> Children { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Child>()
.HasRequired(c => c.Parent)
.WithRequiredPrincipal(p => p.Child1)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Child>()
.HasRequired(c => c.Parent)
.WithRequiredPrincipal(p => p.Child2)
.WillCascadeOnDelete(false);
//modelBuilder.Entity<Child>()
// .HasRequired(c => c.Parent)
// .WithRequiredPrincipal(p => p.Child3)
// .WillCascadeOnDelete(false);
}
}
答案 0 :(得分:1)
看起来您正在尝试从Parent到Child实体建立一对多关系。在这种情况下,代码应如下所示:
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
public Parent Parent { get; set; }
}
只要您遵循有关命名导航属性和外键的默认约定,就不必在Fluent API中指定关系。您将必须使用Fluent API和/或属性来配置您使用非约定名称的关系,例如,重命名ParentId需要您在[ForeignKey(“Parent”)]属性上标记它。
使用Fluent API的最常见用例是禁用级联删除(无法使用属性执行此操作)。