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.
Ho provato il codice e funziona benissimo. mi ha appena chiesto di definire le chiavi primarie nella: configurazione HasKey (k => k.pkStockItemID); – Raphael
@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. –