如何在EF 4.0 FluentAPI CTP5中映射0..1到*关系? 我一直在犯这个错误
因为从属角色中的所有属性都是不可为空的, 主要角色的多样性必须为“1”。
我不知道如何解决它......
我的代码看起来像这样
public class Child{
public int pID { get; set; }
public Parent Parent_Object{ get; set; }
public int Parent{ get; set; }
public Child() {
}
}
public class Parent {
public int pID { get; set; }
public List<Child> Children { get; set; }
public Parent () {
}
}
对于映射代码看起来像这样
modelBuilder.Entity<Child>().HasKey(c=> c.pID);
modelBuilder.Entity<Parent>().HasKey(c=> c.pID);
modelBuilder.Entity<Child>().HasOptional(c=> c.Parent_Object)
.WithMany(p => p.Children)
.HasForeignKey(p => p.Parent);
也可以只有
public Parent Parent{ get; set; }
而不是
public Parent Parent_Object{ get; set; }
public int Parent{ get; set; }
在数据库中,FKfield被命名为“Parent”而不是“ParentpID”。在这种情况下,映射应该如何?
答案 0 :(得分:9)
你可以简单地从映射中删除外键列,一切都会正常工作:
public class Child{
public int pID { get; set; }
public Parent Parent_Object{ get; set; }
public Child() { }
}
public class Parent {
public int pID { get; set; }
public List Children { get; set; }
public Parent () { }
}
public class Context : DbContext {
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) {
modelBuilder.Entity().HasKey(c => c.pID);
modelBuilder.Entity().HasKey(c => c.pID);
modelBuilder.Entity().HasOptional(c => c.Parent_Object).WithMany(p => p.Children);
}
public DbSet Parents { get; set; }
public DbSet Childs { get; set; }
}
作为替代方案,您可以使用nullable int Parent属性,如下所示:
public int? ParentId { get; set; }
在这种情况下,您的初始代码也是正确的。