Ich habe zwei einfache Tabellen, die Spalten in einer vorhandenen Datenbank zur Karte haben:Eine zu viele Beziehung in Entity Framework 6
public class StockItem
{
public System.Guid pkStockItemID { get; set; }
public virtual List<StockItem_ExtendedProperties> ExtendedProperties { get; set; }
}
public class StockItem_ExtendedProperties
{
public System.Guid pkStockItem_ExtendedPropertiesID { get; set; }
public System.Guid fkStockItemId { get; set; }
public virtual StockItem StockItem { get; set; }
}
Im Folgenden sind die Konfigurationsklassen für beide:
public StockItemConfiguration()
{
this.HasMany(item => item.ExtendedProperties)
.WithRequired(property => property.StockItem)
.HasForeignKey(property => property.fkStockItemId)
.WillCascadeOnDelete();
}
public StockItem_ExtendedPropertiesConfiguration()
{
this.HasRequired(property => property.StockItem)
.WithMany(item => item.ExtendedProperties)
.HasForeignKey(property => property.fkStockItemId)
.WillCascadeOnDelete();
}
Diese führt zu dem Fehler: The item with identity 'StockItem_ExtendedProperties' already exists in the metadata collection. Parameter name: item
.
Es scheint, dass die Definition der Beziehung von beiden Seiten der Tabelle den Fehler verursacht. Das Entfernen der Konfiguration von beiden Seiten führt jedoch immer noch zum gleichen Fehler.
Zusätzlich zu, wie das oben zu beheben, würde ich gerne wissen, was der Grund ist und welche der beiden Tabellen in einer solchen Beziehung konfiguriert werden sollte. Vielen Dank.
Ich habe Ihren Code ausprobiert und es funktioniert gut. Es hat mich gebeten, die Primärschlüssel in der Konfiguration zu definieren: Konfiguration HasKey (k => k.pkStockItemID); – Raphael
@Raphael: Das Problem stellte sich als völlig anders heraus. Der Unterstrich im Namen 'StockItem_ExtendedProperties' stürzte EF aus irgendeinem Grund. Entfernen das macht es funktioniert. Ich verwende EF 6.0.0.0 und frage mich, ob es ein Fehler ist oder ob Unterstriche nicht erlaubt sind. –