Usiłuję skonfigurować model Entity Framework z Opcjonalnie: relacji:Entity Framework opcjonalnie: opcjonalnie związek
W mojej sytuacji, czasami rekord AdditionalData istnieje wskazujący na BaseTable rekordu, ale czasami BaseTable lub Rekordy AdditionalData istnieją bez żadnego powiązania. Obcy klucz do BaseTable (jeśli istnieje) znajduje się w tabeli AdditionalData.
Chcę móc nawigować w przód iw tył między tabelą BaseTable i dowolnymi dodatkowymi dyskami, które mogą być połączone.
BaseTable 0..1 ----- 0..1 AdditionalData1
\
--- 0..1 AdditionalData2
public class BaseTable {
public int Id { get; set; }
public virtual AdditionalType1 AdditionalType1 { get; set; }
public virtual AdditionalType2 AdditionalType2 { get; set; }
}
public class AdditionalType1 {
public int Id { get; set; }
public int? BaseTableId { get; set; }
public virtual BaseTable BaseTable { get; set; }
}
public class AdditionalType2 {
public int Id { get; set; }
public int? BaseTableId { get; set; }
public virtual BaseTable BaseTable { get; set; }
}
jaki sposób dokonać tej pracy? Mam miarę:
modelBuilder.Entity<AdditionalType1>()
.HasOptional(zmt => zmt.BaseTable)
.WithOptionalDependent(zm => zm.AdditionalType1)
.Map(a => a.MapKey("BaseTableId"));
modelBuilder.Entity<AdditionalType2>()
.HasOptional(zmt => zmt.BaseTable)
.WithOptionalDependent(zm => zm.AdditionalType2)
.Map(a => a.MapKey("BaseTableId"));
ale mówi mi tak:
error: (1564,6) : error 0019: Each property name in a type must be unique. Property name 'BaseTableId' was already defined.
Nie wiem dokładnie, co to oznacza, i nie wiem, jak to naprawić.
EDIT: Jeśli usunąć klauzule Mapa/MapKey jak sugeruje tutaj (https://stackoverflow.com/a/8016308/237091) otrzymuję ten błąd zamiast, gdy zapytanie działa, że używa go:
Invalid column name 'BaseTable_Id' as it maps itself to BaseTable_Id automatically instead of my BaseTableId field.
"Czasami istnieje tabela bazowa" Aby utworzyć wiersze tabeli podstawowej dla użytkowników lub bardzo źle zrozumieć działanie baz danych. To nie jest jak kot Schrodingera, czy twoja baza danych ma tabelę, która musi zostać ustalona w czasie projektowania. – MrFox
@Mr Fox: Edytowany w celu wyjaśnienia - mówiłem o rekordach, a nie o rzeczywistym istnieniu stołu. –