C#、.NET Framework 4.0およびEntity Frameworkコードファースト6.1.3でライブラリを開発しています。複合外部キーとの1..n関係のエラー
私はEFを使用しようとすると、私はこのエラーを取得:
VariableData_AggregationLevelConfiguration_Source:多重度は 'VariableData_AggregationLevelConfiguration_Source' 関係の「VariableData_AggregationLevelConfigurationの役割に有効な ではありません。 従属ロールはキープロパティを参照するため、 の上限は、依存ロールの多重度は「1」でなければなりません。
は、私はこれをデザインしたい:
ProductionOrder
は、1つまたは複数のAggregationLevelConfiguration
を持つことができます。
AggregationLevelConfiguration
は、0以上の数値を持つことがあります。VariableData
ProductionOrder
は、1つまたは複数の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);
}
}
しかし、私はそれが正しいことだと思います。
何が間違っていますか?または、この問題を解決するにはどうすればよいですか?
ありがとうございました。私の最初のバージョンでは、 'VariableData'のプライマリは、' HasKey(vd => new {vd.AggregationLevelConfigurationId、vd.ProductionOrderId、vd.VariableDataId}) 'でしたが、試してみると別のエラーが出ました'AggregationLevelConfiguration'への外部キーを作成します。多分、エラーは '.HasForeignKey'の列の順番であったでしょう。 – VansFannel