2009-12-04 3 views
0

Je viens de lire this nice article qui m'a appris à utiliser l'héritage (Table par hirarchie). Je me demandais, disons que j'ai une colonne "HireDate" qui doit utiliser dans la sous-classe. C'est sûr que dans la base de données, il doit être marqué comme nullable, mais comment puis-je marquer non nullable dans l'EDM? J'ai essayé de le définir comme non-nullable, mais ensuite il dit qu'il a besoin d'une valeur par défaut, et je veux que la valeur par défaut soit DateTime.Now, pas une valeur constante.Champs non nullables dans l'héritage de table - EDM

+0

Pourquoi ne pas utiliser une table par classe? "Vous n'aurez pas besoin" de réinventer le vélo. – Restuta

+1

Ne pas utiliser de table par classe avec EF qui n'est certainement pas recommandé ... voir http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an- inheritance-strategy.aspx –

+0

Désolé, je veux dire table par type. – Restuta

Répondre

0

Si une propriété (telle que HireData) est déclarée sur un type dérivé et que vous utilisez TPH, vous devriez pouvoir la marquer comme non-nullable dans l'EDM malgré le fait qu'elle soit nulle dans la base de données.

En fait cette capacité est l'une des caractéristiques de TPH.

...

Alors j'ai regardé au poste de blog en question, et a remarqué qu'il a un problème, car il expose la colonne discriminante (PersonCategory) en tant que propriété de l'entité de base, qui, si elle a permis rendrait le type d'une entité mutable, puisque vous pourriez facilement faire cela:

student.PersonCategory = 2; 

Qui rendrait un étudiant un administrateur! Et ce n'est pas autorisé par l'EF. Par conséquent, si vous suivez cet exemple de près, il est probable que ce soit votre problème.

La colonne qui contient le discriminateur ne doit pas être mappée à une propriété dans l'EDM, elle doit uniquement être utilisée dans le mappage (par exemple, "Ajouter une condition" dans "Mappages vers XXX").

Solution au problème dans le blog: Supprimer la propriété PersonCategory de la classe Person.

Quoi qu'il en soit, j'espère que cela aide

Alex

Questions connexes