2

EF 4.0 FluentAPI CTP5 で 0..1 から * への関係をマップするにはどうすればよいですか? このエラーが発生し続けます

従属ロールのすべてのプロパティは null 非許容であるため、プリンシパル ロールの多重度は '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 の名前は「ParentpID」ではなく「Parent」です。この場合、マッピングはどのようになりますか?

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

別の方法として、次のように null 許容の int Parent プロパティを使用できます。

public int? ParentId { get; set; }  

この場合、最初のコードも正しくなります。

于 2010-12-24T14:11:55.523 に答える