2013-08-06 82 views
2

我在我的產品類上創建1對多關係時遇到了產品規格類有兩個主鍵ProductId,SpecificationId的問題。產品類並不總是有一個ProductSpecification類沒有人沒有如何解決我的問題我得到一個錯誤做與上限1.我是新來的EF和先做代碼,所以如果你知道該怎麼做,請離開一個詳細的解釋謝謝。EF多列鍵列一對多

類:

public class ProductSpecification 
{  
    [Key] 
    [Column(Order = 1)] 
    public long ProductId { get; set; } 

    [Key] 
    [Column(Order = 2)] 
    public long SpecificationId { get; set; } 


    [ForeignKey("ProductId")] 
    public virtual Product Product { get; set; } 
    [ForeignKey("SpecificationId")] 
    public virtual Specification Specification { get; set; } 
} 


public class Specification 
{ 
    [Key] 
    public long SpecificationId { get; set; } 

    [Required(ErrorMessage = "Please enter a product specification name.")] 
    [DataType(DataType.Text)] 
    public string Name { get; set; } 

    [Required(ErrorMessage = "Please enter a product specification value.")] 
    [DataType(DataType.Text)] 
    public string Value { get; set; } 

    [ForeignKey("SpecificationId")] 
    public virtual ICollection<ProductSpecification> ProductSpecs { get; set; } 
} 

的DataContext:

modelBuilder.Entity<ProductSpecification>().HasKey(x => new { x.ProductId, x.SpecificationId }); 

modelBuilder.Entity<Specification>().HasOptional(x => x.ProductSpecs) 
    .WithMany().HasForeignKey(x => x.SpecificationId); 
+0

我想你需要在流利和註釋風格之間進行選擇......我的意思是我不認爲你可以使用* both *來定義相同的東西。 –

+0

如果你刪除了' modelBuilder'代碼? –

+0

如果我刪除數據註釋,則會得到相同的錯誤多重性衝突 – ONYX

回答

0

讓您ForeignKey的可空:

衆長? SpecificationId {get;組; }

public virtual Specification?規格{get;組; }