2012-05-24 83 views
0

EF符號相反第一個工具是生成複合鍵EF Reverse Code First Tool爲什麼會生成複合鍵?

public vw_ResourcesMap() 
    { 
     // Primary Key 
     this.HasKey(t => new { t.Refno, t.Obsolete }); // Why??? 

     // Properties 
     this.Property(t => t.Refno) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

     this.Property(t => t.Name) 
      .HasMaxLength(50); 

     this.Property(t => t.LocnID) 
      .IsFixedLength() 
      .HasMaxLength(2); 

     this.Property(t => t.Created_by) 
      .HasMaxLength(50); 

     // Table & Column Mappings 
     this.ToTable("vw_Resources"); 
     this.Property(t => t.Refno).HasColumnName("Refno"); 
     this.Property(t => t.Name).HasColumnName("Name"); 
     this.Property(t => t.Head).HasColumnName("Head"); 
     this.Property(t => t.LocnID).HasColumnName("LocnID"); 
     this.Property(t => t.Obsolete).HasColumnName("Obsolete"); 
     this.Property(t => t.Created_by).HasColumnName("Created_by"); 
     this.Property(t => t.Version).HasColumnName("Version"); 
     this.Property(t => t.Rank).HasColumnName("Rank"); 
    } 
} 

我不得不把主鍵聲明更改爲this.HasKey(t => t.Refno)映射關係,否則我會得到下面的異常。

關係約束中的從屬角色和主角色中的屬性數量必須相同。

也許這是一個錯誤 - IDK

所有的工作,但希望增加了解和認識。

謝謝!

+0

它是數據庫視圖的逆向工程映射嗎?其他列可以爲空嗎? –

+0

我有類似的問題,因爲我不斷改變數據庫,並在更改後使用反向工程來正確地映射數據庫,所以有一次我忘記更改數據庫,並導致與您的錯誤相同。問題是我從一列刪除IDENTITY,並添加到另一個不應該是IDENTITY。 –

+0

@LadislavMrnka是的,它映射這是該工具的更新。列是可空的。主要特別需要非空來滿足關係(如果我沒有記錯的話)。 – Rich

回答

0

數據庫視圖沒有主鍵,因此EF嘗試使用所有不使用二進制數據類型的非空值列來推斷該鍵。

+0

對我有意義。謝謝! BTY - 我非常感謝你在SO和你的博客上的所有工作 - 非常有幫助! – Rich