2

如何在 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”。在这种情况下,映射应该如何?

4

1 回答 1

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; }
  }

作为替代方案,您可以使用可为空的 int Parent 属性,如下所示:

public int? ParentId { get; set; }  

在这种情况下,您的初始代码也将是正确的。

于 2010-12-24T14:11:55.523 回答