2013-11-22 38 views
5

Ho due semplici tabelle che devono mappare le colonne in un database esistente:uno a molti 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; } 
} 

seguenti sono le classi di configurazione per entrambi:

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(); 
} 

Questo restituisce l'errore: The item with identity 'StockItem_ExtendedProperties' already exists in the metadata collection. Parameter name: item.

Sembra che la definizione della relazione da entrambi i lati della tabella stia causando l'errore. Tuttavia, la rimozione della configurazione da entrambi i lati provoca ancora lo stesso errore.

Oltre a come risolvere il precedente, mi piacerebbe sapere qual è la ragione e quale delle due tabelle in tale relazione dovrebbe essere configurata. Grazie.

+0

Ho provato il codice e funziona benissimo. mi ha appena chiesto di definire le chiavi primarie nella: configurazione HasKey (k => k.pkStockItemID); – Raphael

+0

@Raphael: il problema si è rivelato completamente diverso. Il carattere di sottolineatura nel nome 'StockItem_ExtendedProperties' stava facendo scattare EF per qualche motivo. Rimozione che lo fa funzionare. Sto usando EF 6.0.0.0 e mi chiedo se sia un bug o se i caratteri di sottolineatura non sono consentiti. –

risposta

8

Risulta il problema era il carattere di sottolineatura nel nome dell'entità StockItem_ExtendedProperties. Rimozione che ha eliminato l'errore. Utilizzando EF 6.0.0.0 che era l'ultima versione disponibile tramite NuGet.

+0

risolto anche il mio problema. Immagineresti che avrebbero già risolto quello –

+0

come lo hai capito? questo ha risolto anche il mio problema, è bizzarro anche se – andryuha

+0

Mi ha aiutato anche io, forse c'è una mappatura che usa lo stesso nome, quindi il nome dell'oggetto DbSet non può essere lo stesso ?? – Evan

5

Ho proprio questo problema. Una classe denominata "Paquete_PartNumber" genera lo stesso errore. La rimozione del trattino basso risolve il problema.

Utilizzo di EF 6.0.1.

1

La rimozione del trattino basso ha risolto anche il mio problema. Tuttavia il vero problema era la convenzione di denominazione.

Rinominare la proprietà della raccolta di navigazione da un lato della relazione risolto il problema senza dover cambiare il nome della tabella nel database

0

Ho provato a rimuovere il carattere di sottolineatura, ma che non ha funzionato per me. Si è scoperto che nel mio caso definire una classe (modello) in plurale (+ s) lo ha incasinato. Dopo aver rimosso il s ha funzionato di nuovo. Molto strano ma lo ha risolto.

Utilizzando EF 6.0.0.0

Problemi correlati