2014-04-22 7 views
6

Wszystkie moje podmioty posiadają klasę bazową:Produkt o tożsamości "Id" już istnieje w zbiorze metadanych. Nazwa parametru: pozycja

public class Entity<TKey> : IEntity<TKey> 
{ 
    dynamic IEntity.Id 
    { 
     get 
     { 
      return this.Id; 
     } 
     set 
     { 
      this.Id = value; 
     } 
    } 

    public TKey Id { get; set; } 
} 

Dla podmiotu przykład Status:

[MetadataType(typeof(StatusMetadata))] 
public partial class Status : Entity<byte> 
{ 
     public string Title { get; set; } 
} 

Kiedy uruchomić kwerendę w bazie danych pojawia się następujący błąd: „The element o tożsamości "Identyfikator" już istnieje w zbiorze metadanych Nazwa parametru: pozycja ". Czy istnieje sposób, aby to naprawić lub jest to problem spowodowany przez dziedziczenie i nie mogę dziedziczyć moich jednostek z żadnej klasy?

Odpowiedz

-1

spróbuj dodać 'nowych' do właściwości takich jak to:

[MetadataType(typeof(StatusMetadata))] 
public partial class Status : Entity<byte> 
{ 
     public new string Title { get; set; } 
} 
+0

nie spróbować tego w EF6? –

+0

Jeszcze go nie używałem. Problem, z którym się spotykasz, może wynikać z faktu, że definiujesz własność Title w klasie, która dziedziczy już właściwość Type dla klasy Entity :) – CedricPoilly

+0

Nie sądzę, że ukrywa się ukrywanie parametru EF. Nie działał w EF5.x Nie próbowałem w ef6.x np. Http://stackoverflow.com/q/18245686/1347784 –

5

Wydaje ogólny błąd, szukając pewnych spostrzeżeń, widziałem, że:

Two tables can have the same name for a primary key. Look at the LightSwitch tables, they all have a primary key called Id.

Na http://social.msdn.microsoft.com/Forums/vstudio/en-US/bd8d47da-d1b4-4be8-a7e5-193fb5360060/the-item-with-identity-actionpk-already-exists-in-the-metadata-collection?forum=lightswitch

Przeglądam więc wszystkie encje i otrzymuję obiekt o zmienionym typie danych Identity i odziedziczę inną klasę, która ma właściwość id.

Czy zmienię to public new string Id { get; set; } na public string Id { get; set; }, podobnie jak inne, i usunę dziedziczkę i wszystko działa poprawnie.

5

Powodem jest fakt, że dziedziczysz po klasie, która już ma właściwość Id innego typu.

Widziałem ten sam błąd w CodeMigrations. Posiadałem właściwość o nazwie "Wersja" typu ciąg znaków, a klasa danych EntityData, z której dziedziczyłem, zawiera także właściwość Wersja typu bajt []. Wygenerował ten sam błąd, co wspomniano:

Rozwiązaniem tego problemu jest po prostu nie używać tych samych nazw właściwości, które są już w twojej klasie podstawowej.

+5

Miałem ten problem z EF 6.1.2. Zaktualizowałem system do wersji 6.1.3, a problem zniknął w magiczny sposób. – Anthony

+0

Potwierdzono. Ukrywanie własności wydaje się być obsługiwane w EF 6.1.3. –

0

Zdarzyło mi z powodu podwójnego pola FK, że przez pomyłkę użyłem dwa razy tego samego pola połączyć tabele ...