EF: Posso mescolare TPH e TPT quando la base astratta e alcuni tipi di calcestruzzo sono in TPH-Table e altri tipi hanno il proprio tavolo?
Domanda
Prima di tutto, queste domande sono simili ma sicuramente non sono le stesse:
Posso mescolare Tabella per gerarchia e tavolo per tipo in Entity Framework? - Si riferisce a uno scenario diverso.
Quadro di entità: tabella del mix per tipo e tabella per gerarchia - Ancora un altro scenario, che nonostante l'accettazione della risposta al primo scenario non è legato ad esso (*).
(*) Secondo di tutto, ho miscelato con successo da tavolo per tipo e tabella-per-gerarchia nel framework di entità, quando l'entità di base è mappata utilizzando la tabella per entità e la tabella con il discriminatore della tabella- La per-gerarchia è più bassa della catena.
.
Sto cercando di mappare quanto segue:
Tabelle:
BaseTable
{
int PK1;
int PK2;
string? Value1;
double? Value2;
}
ChildTable3
{
int PK1;
int PK2;
int Value;
}
.
Entità:
abstract BaseEntity : class // Maps to BaseTable
{
int PK1; // Maps to PK1 in relevant table
int PK2; // Maps to PK2 in relevant table
}
Entity1 : BaseEntity // Maps to BaseTable when Value1 != null
{
string Value; // Maps to Value1
}
Entity2 : BaseEntity // Maps to BaseTable when Value1 == null && Value2 != null
{
double Value; // Maps to value2
}
Entity3 : BaseEntity // Maps to ChildTable3
{
int Value; // Maps to value
}
.
Prima di aggiungere i mappature di Entity3 funzionavano.
Dopo aver aggiunto Entity3 e la sua mappatura, ricevo il seguente errore durante la compilazione:
Errore 1 Errore 3026: problema nei frammenti di mappatura a partire dalle linee 980, 986, 995: la perdita di dati o la violazione dei costrizioni chiave è possibile nella tabella della tabella. Un'entità con chiave (PK) non è andata e ritorno quando: (PK è in "Entityset e entità dei" Basetables "e l'entità è il tipo [mynamespace.entity3]) Path \ a \ my.edmx 981 15 myasembly
- .
- C'è un modo per fare questo lavoro?
- Se è possibile hackerare l'EDMX per rendere questo lavoro, perderò l'hack su ogni aggiornamento dal database?
Soluzione
I found a workflow that enables performing such mappings via designer:
- Create BaseEntity, Entity1, Entity2, Entity3
- Map BaseEntity to BaseTable as abstract
- Map Entity1 to BaseTable with condition
- Map Entity2 to BaseTable with conditions
- Map Entity3 to ChildTable3
- Unmap BaseEntity
To add additional child tables later on:
- Remap BaseEntity
- Map new child tables
- Unmap BaseEntity