2013-11-22 4 views
5

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.

+0

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

+0

@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. –

Antwort

8

Es stellte sich heraus, das Problem war der Unterstrich im Namen der Entität StockItem_ExtendedProperties. Durch das Entfernen wurde der Fehler behoben. Verwenden von EF 6.0.0.0, welches die letzte verfügbare Version über NuGet war.

+0

Mein Problem wurde ebenfalls behoben. Sie würden herausfinden, dass sie das bereits beheben würden –

+0

Wie haben Sie es herausgefunden? das hat mein Problem auch gelöst, es ist bizarr obwohl – andryuha

+0

Hat mir auch geholfen, vielleicht gibt es eine Zuordnung, die den gleichen Namen verwendet, so dass Ihr DbSet-Objektname nicht derselbe sein kann ?? – Evan

5

Ich habe genau das Problem auch. Eine Klasse namens "Paquete_PartNumber" löst denselben Fehler aus. Das Entfernen des Unterstrichs löst das Problem.

Verwenden von EF 6.0.1.

1

Das Entfernen des Unterstrichs löste auch mein Problem. Das eigentliche Problem war jedoch die Namenskonvention.

Umbenennung der Navigation Sammlungseigenschaft auf der einen Seite der Beziehung das Problem gelöst, ohne den Namen der Tabelle in der Datenbank zu entfernen

0

ich den Unterstrich versucht, ändern zu müssen, aber das funktioniert nicht für mich arbeiten. Es stellte sich heraus, dass in meinem Fall die Definition einer (Modell-) Klasse im Plural (+ s) es vermasselte. Nach dem Entfernen der s funktionierte es wieder. Sehr komisch, aber es hat es gelöst.

Verwendung von EF 6.0.0.0

Verwandte Themen