EF: Puis-je mélanger TPH et TPT lorsque la base abstraite et quelques types de béton sont dans la table TPH et d'autres types ont leur propre table?

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

Question

Tout d'abord, ces questions sont similaires mais ne sont certainement pas les mêmes:

Puis-je mélanger Table par hiérarchie et table par type dans le cadre d'entité? - fait référence à un scénario différent.

Cadre d'entité: Table de mixage par type et table par hiérarchie - encore un autre scénario, qui, malgré accepter la réponse au premier scénario, n'est pas lié à celui-ci (*).

(*) Deuxièmement, j'ai successivement mélangé de table-par type et de table-par-hiérarchie dans la structure d'entité, lorsque l'entité de base est mappée à l'aide de la table-Pertitude et de la table avec le discriminateur de la table. La hiérarchie est plus basse dans la chaîne.


J'essaie de cartographier les éléments suivants:

Tables:

BaseTable
{
    int PK1;
    int PK2;
    string? Value1;
    double? Value2;
}

ChildTable3
{
    int PK1;
    int PK2;
    int Value;
}

Entités:

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
}

Avant d'ajouter l'entité3 des mappages fonctionnés.

Après avoir ajouté entité3 et sa mappage, je reçois l'erreur suivante lors de la compilation:

Erreur 1 Erreur 1 Erreur 3026: Problème dans les fragments de mappage à partir des lignes 980, 986, 995: la perte de données ou la violation des contraintes de clé est possible dans le tableau bastotable. Une entité avec la clé (PK) ne sera pas aller-retour lorsque: (PK est dans l'entité "Basetables" et l'entité est TYPE [MYNAMESPACE.ENTITY3]) Chemin \ to \ my.edmx 981 15 myassemblage

  • Y a-t-il un moyen de faire ce travail?
  • S'il est possible de pirater l'EDMX pour faire ce travail, vais-je perdra le piratage sur chaque mise à jour de la base de données?
Était-ce utile?

La solution

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top