2013-11-22 12 views
5

Mam dwie proste tabele, które mają do mapowania kolumn w istniejącej bazie danych:jeden do wielu relacji w 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; } 
} 

Obserwuje są klasy konfiguracyjne dla obu:

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

ten powoduje błąd: The item with identity 'StockItem_ExtendedProperties' already exists in the metadata collection. Parameter name: item.

Wydaje się, że zdefiniowanie relacji z obu stron stołu jest przyczyną błędu. Jednak usunięcie konfiguracji z dowolnej strony nadal powoduje ten sam błąd.

Poza jak rozwiązać powyższe, chciałbym wiedzieć, co jest przyczyną, a która z dwóch tabel w taki związek powinien być skonfigurowany. Dzięki.

+0

Próbowałem twój kod i działa dobrze. po prostu poprosił mnie o zdefiniowanie kluczy podstawowych w: konfiguracji HasKey (k => k.pkStockItemID); – Raphael

+0

@Raphael: Problem okazał się zupełnie inny. Podkreślenie w nazwie 'StockItem_ExtendedProperties' spowodowało z jakiegoś powodu potknięcie EF. Usunięcie go sprawia, że ​​działa. Używam EF 6.0.0.0 i zastanawiam się, czy jest to błąd, czy też podkreślenia są niedozwolone. –

Odpowiedz

8

Okazuje się, że problemem był podkreślenia w nazwie podmiotu StockItem_ExtendedProperties. Usunięcie, które pozbyło się błędu. Korzystanie z EF 6.0.0.0, która była najnowszą dostępną wersją przez NuGet.

+0

Naprawiono też mój problem. Myślisz, że naprawili to już –

+0

jak to rozgryzłeś? to też naprawiło mój problem, to jest dziwne, ale – andryuha

+0

Pomógł mi też, może istnieje mapowanie, które używa tej samej nazwy, więc nazwa obiektu DbSet nie może być taka sama ?? – Evan

5

że mam problemu zbyt dokładnie. Klasa o nazwie "Paquete_PartNumber" zgłasza ten sam błąd. Usunięcie podkreślenia rozwiązuje problem.

Korzystanie z EF 6.0.1.

1

Wyjmowanie podkreślenia rozwiązać mój problem, jak również. Jednak prawdziwym problemem była konwencja nazewnictwa.

Zmiana nazwy właściwości zbierania żeglugi na jednej stronie relacji rozwiązać problem bez konieczności zmiany nazwy tabeli w bazie danych

0

próbowałem usunięcie podkreślenia, ale to nie dla mnie. Okazało się, że w moim przypadku zdefiniowanie klasy (modelu) w liczbie mnogiej (+ s) pomieszało to. Po usunięciu s działało to ponownie. Bardzo dziwne, ale rozwiązało to.

Używanie EF 6.0.0.0

Powiązane problemy