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?

StackOverflow https://stackoverflow.com/questions/6034985

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?
È stato utile?

Soluzione

I found a workflow that enables performing such mappings via designer:

  1. Create BaseEntity, Entity1, Entity2, Entity3
  2. Map BaseEntity to BaseTable as abstract
  3. Map Entity1 to BaseTable with condition
  4. Map Entity2 to BaseTable with conditions
  5. Map Entity3 to ChildTable3
  6. Unmap BaseEntity

To add additional child tables later on:

  1. Remap BaseEntity
  2. Map new child tables
  3. Unmap BaseEntity
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top