bog*_*diu 2 mapping fluent-interface foreign-keys entity-framework-4
如何在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 () {
}
}
Run Code Online (Sandbox Code Playgroud)
对于映射,代码看起来像这样
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);
Run Code Online (Sandbox Code Playgroud)
也有可能只有
public Parent Parent{ get; set; }
Run Code Online (Sandbox Code Playgroud)
代替
public Parent Parent_Object{ get; set; }
public int Parent{ get; set; }
Run Code Online (Sandbox Code Playgroud)
在数据库中,FKfield被命名为"Parent"而不是"ParentpID".在这种情况下,映射应该如何?
你可以简单地从映射中删除外键列,一切都会正常工作:
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; }
}
Run Code Online (Sandbox Code Playgroud)
作为替代方法,您可以使用nullable int Parent属性,如下所示:
public int? ParentId { get; set; }
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您的初始代码也是正确的.