Próbuję użyć Code First z Fluent do mapowania klasy bazowej z jednym typem pochodnym, gdzie schemat tabel jest tabelą -Układ typu. Ponadto typ pochodny ma relację wiele do jednego z innym typem, który ma również złożony klucz obcy. (Przyciski tych tabel jest niezmienny i nazwy dopasować dokładnie).Kod EF 4.3 Pierwszy: Tabela na typ (TPT) z kluczem podstawowym złożonym i kluczem obcym
Oto przykład tego, co staram się osiągnąć w CSharp:
public class BaseType
{
public int Id;
public int TenantId;
public int Name;
}
public class DerivedType : BaseType
{
public int Active;
public int OtherTypeId;
public OtherType NavigationProperty;
}
Oto konfiguracja to w klasy konfiguracji:
public BaseTypeConfiguration()
{
ToTable("BaseTypes", "dbo");
HasKey(f => new { f.Id, f.TenantId});
Property(f => f.Id)
.HasColumnName("BaseTypeId")
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}
public DerivedTypeConfiguration()
{
ToTable("DerivedTypes", "dbo");
//OtherType has many DerivedTypes
HasRequired(dt=> dt.OtherTypeNavigation)
.WithMany(ot=> ot.DerivedTypes)
.HasForeignKey(dt=> new { dt.OtherTypeId, dt.TenantId});
}
z tego co mogę powiedzieć mój mapowanie jest ustawiony prawidłowo (jak w, ja po wielu samouczki i przykłady, które miały dokładny ta sytuacja, ale z jednym identyfikatorem kolumny)
Kiedy próbuję kwerendy tych podmiotów wyjątek pojawia się: The foreign key component 'TenantId' is not a declared property on type 'DerivedType'.
I gdy próbuję jawnie zadeklarować tych właściwości na typ za pomocą słowa kluczowego new
uzyskać wyjątek mówiąc, że zduplikowane właściwości istnieje.
Odpowiedź Response z EF Zespołu
Jest to część bardziej fundamentalne ograniczenia gdzie EF nie obsługuje posiadające właściwości zdefiniowane w typie bazowym, a następnie używając go jako klucza obcego w typ pochodny. Niestety jest to ograniczenie, które bardzo trudno byłoby usunąć z naszej bazy kodu. Biorąc pod uwagę, że nie widzieliśmy zbyt wielu próśb o to, nie jest to coś, co zamierzamy rozwiązać na tym etapie, więc zamykamy ten problem.
Zakładam te pola są nieruchomości w prawdziwym życiu? –
Uważam, że jest to nieobsługiwany scenariusz mapowania (przynajmniej nigdy nie znalazłem rozwiązania): http://stackoverflow.com/questions/10961690/inheritance-and-composite-foreign-keys-one-part-of-the-key- w klasie bazowej- – Slauma
Zdecydowanie uważam, że obecnie nie jest to możliwe, ale "nieobsługiwane"? Jest to całkowicie poprawna konfiguracja, nigdy nie znalazłem niczego w dokumentacji, która wskazywałaby, że to nie powinno działać, więc wydaje mi się, że to raczej błąd. – MDADev