Ich entwickle eine Bibliothek mit C#, .NET Framework 4.0 und Entity Framework Code First 6.1.3.Fehler in 1..n-Beziehung mit zusammengesetztem Fremdschlüssel
Ich bekomme diese Fehlermeldung, wenn ich versuche EF zu verwenden:
VariableData_AggregationLevelConfiguration_Source: Multiplicity ist nicht gültig in Role 'VariableData_AggregationLevelConfiguration_Source' in Beziehung 'VariableData_AggregationLevelConfiguration'. Da die abhängige Rolle sich auf die Schlüsseleigenschaften bezieht, muss die obere Grenze von die Multiplizität der abhängigen Rolle '1' sein.
Ich möchte dies entwerfen:
A ProductionOrder
eine oder mehr AggregationLevelConfiguration
haben könnte.
Ein AggregationLevelConfiguration
könnte 0 oder mehr VariableData
haben.
Ein ProductionOrder
könnte einen oder mehrere VariableData
haben.
Dies sind die Klassen:
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; }
}
Und das sind die Konfigurationsklassen:
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);
}
}
Aber ich denke, dass es richtig ist.
Was ist los? Oder, wie kann ich dieses Problem beheben?
HasRequired(vd => vd.AggregationLevelConfiguration)
.WithMany(agl => agl.VariableData)
.HasForeignKey(vd => new { vd.AggregationLevelConfigurationId, vd.ProductionOrderId });
Da AggregationLevelConfigurationId, ProductionOrderId
ist Ihr Primärschlüssel in AggregationLevelConfiguration
, können Sie nur eine Eins-zu-Eins-Beziehung (nach:
Danke. In meiner ersten Version war primary in 'VariableData'' HasKey (vd => neu {vd.AggregationLevelConfigurationId, vd.ProductionOrderId, vd.VariableDataId}); 'aber ich bekam einen weiteren Fehler (ich erinnere mich nicht), als ich es versuchte Erstellen Sie den Fremdschlüssel für 'AggregationLevelConfiguration'. Vielleicht lag der Fehler in der Reihenfolge der Spalte im '.HasForeignKey'. – VansFannel