2017-05-16 33 views
0

我正在用C#,.NET Framework 4.0和Entity Framework Code First 6.1.3開發一個庫。1..n與複合外鍵的關係出錯

VariableData_AggregationLevelConfiguration_Source:

當我嘗試使用EF我得到這個錯誤:多樣性是 的作用 'VariableData_AggregationLevelConfiguration_Source' 的關係 'VariableData_AggregationLevelConfiguration' 無效。因爲依賴角色是指關鍵屬性,所以依賴角色的多重性必須是'1'。

我想設計這樣的:

一個ProductionOrder可以有一個或多個AggregationLevelConfiguration
一個AggregationLevelConfiguration可能有零個或多個VariableData
一個ProductionOrder可能有一個或多個VariableData

這些類:

public class AggregationLevelConfiguration 
{ 
    public byte AggregationLevelConfigurationId { get; set; } 
    public int ProductionOrderId { get; set; } 

    [ ... ] 

    public virtual ProductionOrder ProductionOrder { get; set; } 
    public virtual IList<VariableData> VariableData { get; set; } 
} 

public class VariableData 
{ 
    public string VariableDataId { get; set; } 
    public int ProductionOrderId { get; set; } 
    public byte AggregationLevelConfigurationId { get; set; } 

    [ ... ] 

    public virtual AggregationLevelConfiguration AggregationLevelConfiguration { get; set; } 
} 

public class ProductionOrder 
{ 
    public int ProductionOrderId { get; set; } 

    [ ... ] 

    public ICollection<AggregationLevelConfiguration> AggregationLevelConfigurations { get; set; } 

    public virtual ICollection<VariableData> VariableData { get; set; } 
} 

而這些配置類:

public class AggregationLevelConfigurationConfiguration : EntityTypeConfiguration<AggregationLevelConfiguration> 
{ 
    public AggregationLevelConfigurationConfiguration() 
    { 
     HasKey(agl => new { agl.AggregationLevelConfigurationId, agl.ProductionOrderId }); 

     [ ... ] 

     HasRequired(agl => agl.ProductionOrder) 
      .WithMany(po => po.AggregationLevelConfigurations); 
    } 
} 

public class VariableDataConfiguration : EntityTypeConfiguration<VariableData> 
{ 
    public VariableDataConfiguration() 
    { 
     HasKey(vd => new { vd.AggregationLevelConfigurationId, vd.ProductionOrderId }); 

     [ ... ] 

     HasRequired(vd => vd.AggregationLevelConfiguration) 
      .WithMany(agl => agl.VariableData) 
      .HasForeignKey(vd => new { vd.AggregationLevelConfigurationId, vd.ProductionOrderId }); 
    } 
} 

public class ProductionOrderConfiguration : EntityTypeConfiguration<ProductionOrder> 
{ 
    public ProductionOrderConfiguration() 
    { 
     HasKey(po => po.ProductionOrderId); 

     Property(po => po.ProductionOrderId) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

     [ ... ] 

     HasRequired(po => po.Product) 
      .WithMany(p => p.ProductionOrders) 
      .HasForeignKey(po => po.ProductId); 
    } 
} 

但我認爲這是正確的。

這是什麼錯誤?或者,我該如何解決這個問題?

回答

0

使用這樣的主鍵,你不能有一個一對多的關係:

HasRequired(vd => vd.AggregationLevelConfiguration) 
      .WithMany(agl => agl.VariableData) 
      .HasForeignKey(vd => new { vd.AggregationLevelConfigurationId, vd.ProductionOrderId }); 

由於AggregationLevelConfigurationId, ProductionOrderIdAggregationLevelConfiguration你的主鍵,你只能有一個一對一的關係(根據到EF)。什麼,你需要做的是這樣的:

HasRequired(vd => vd.AggregationLevelConfiguration) 
      .WithMany(agl => agl.VariableData) 
      .HasForeignKey(vd => new { vd.ForeignKeyInVariableData }); 

哪裏ForeignKeyInVariableDataAggregationLevelConfiguration主鍵(或者可能是主鍵的甚至是一部分)。

+0

謝謝。在我的第一個版本中,'VariableData'中的主要部分是'HasKey(vd => new {vd.AggregationLevelConfigurationId,vd.ProductionOrderId,vd.VariableDataId});'但是當我嘗試使用另一個錯誤時(我不記得它)創建「AggregationLevelConfiguration」的外鍵。也許錯誤出現在'.HasForeignKey'中的列順序中。 – VansFannel