2017-01-04 1 views
2

Est-il possible d'utiliser le (génial) EntityFramework Reverse POCO Generator pour générer des POCO dans un scénario d'héritage table-per-type?Héritage de table par type avec le générateur POCO Reverse Entity Framework

Ma base de données contient une table log 'base', et deux tables qui en découlent:

create table LogBase 
(
    Id int identity(1, 1) not null, 
    LogTime datetime not null default getdate(), 
    constraint PK_LogBase primary key clustered(Id) 
) 

create table ErrorLog 
(
    Id int not null, 
    ErrorMessage nvarchar(max), 
    StackTrace nvarchar(max), 
    constraint PK_ErrorLog primary key(Id), 
    constraint FK_ErrorLog_LogBase foreign key(Id) references LogBase(Id) 
) 

create table ChangeLog 
(
    Id int not null, 
    PropertyName nvarchar(max), 
    OldValue nvarchar(max), 
    NewValue nvarchar(max), 
    constraint PK_ChangeLog primary key(Id), 
    constraint FK_ChangeLog_LogBase foreign key(Id) references LogBase(Id) 
) 

Par défaut, l'inverse POCO Generator génère 3 C classes # - Logbase, ErrorLog, et ChangeLog - chacun qui contient une propriété Id et qui n'ont aucune relation d'héritage entre eux.

Je peux préciser que ErrorLog et ChangeLog héritent de LogBase en créant des classes et de mettre comme partials l'héritage : LogBase dans les classes partielles - est-ce la bonne façon de préciser l'héritage?

Dans le générateur de modèles, le rappel UpdateColumn me permet de spécifier des tables qui doivent omettre leurs colonnes Id dans le POCO généré.

Je peux utiliser UpdateColumn pour les tables ErrorLog et ChangeLog - cela entraîne la suppression de la propriété 'Id' de chaque classe, ce qui est correct pour l'héritage table par type. Cependant, il en résulte aussi dans la ErrorLog et des cours de ChangeLog retiré du DbContext généré, et le commentaire suivant apparaît dans les classes ErrorLog et ChangeLog:

// The table 'ChangeLog' is not usable by entity framework because it 
// does not have a primary key. It is listed here for completeness. 
  • Est-il possible de préciser la relation d'héritage sans provoque l'omission du générateur des tables dérivées du modèle?

  • Existe-t-il un moyen d'empêcher le générateur d'inclure les propriétés de navigation dans les objets POCO générés?

+0

pointeur Grande à l'utilisation de UpdateColumn pour résoudre la question en double id dans TPT. Merci. –

Répondre

2

La dernière version (5 janvier 2017) en v2.27 a fixé un problème (# 167) avec des colonnes cachées et primaire clés qui font ce travail maintenant.

Tout problème, mettez à jour le cas GitHub sur au https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator/issues/181

+0

Merci beaucoup Simon - cela l'a réglé. –

1
+0

Un grand merci @ErikEJ - un lien très utile. J'ai suivi le conseil, et même si j'ai fait quelques progrès, j'ai toujours des problèmes - à savoir que les tables dérivées produisent des POCO avec des commentaires qui les accompagnent disant qu'elles ne sont pas utilisables par framework d'entité car elles n'ont pas de clé primaire '.J'ai soulevé un problème dans le projet GitHub. –