Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Entity Framework 4 Table Per Hierarchy - Comment définir les propriétés de navigation sur les enfants?

J'ai donc résolu quelques-uns de mes problèmes, mais je me suis heurté à un mur de briques.

Tout d'abord, lorsque vous créez des FK auto-référencés côté base de données, lorsque vous essayez de "Mettre à jour le modèle à partir de la base de données", Entity Framework ajoutera ces propriétés de navigation au type de base principal, car il n'a pas de sens explicite de TPH - vous besoin de le faire du côté du modèle.

MAIS, vous pouvez ajouter manuellement les propriétés de navigation aux types enfants.

WRT cette erreur :

C'était parce que j'avais un FK appelé "Location_State" que j'essayais d'utiliser pour la relation "ZipCode_State", ET la relation "City_State" - qui ne fonctionne pas (toujours aucune idée pourquoi).

Donc, pour résoudre cela, j'ai dû ajouter des colonnes supplémentaires et des FK supplémentaires - une appelée "ZipCode_State" et une autre appelée "City_State" - évidemment, il doit s'agir d'un 1-1 entre les navs et les FK physiques.

C'est mon champ discriminateur. Du côté de la base de données, il n'est pas nullable .

J'ai lu des discussions sur ce problème, et ils ont dit que vous deviez changer les relations de 0..* à 1..* - mais mes relations étaient déjà 1..*.

Si vous regardez ma table de base de données réelle "Emplacements" ci-dessus, tous les FK sont nullables (ils doivent l'être). Par conséquent, j'ai commencé à me demander si mes relations devaient être 0..*.

Mais ils peuvent être annulés à cause du TPH - tous les "emplacements" n'auront pas un "état". Mais si cet emplacement est une "ville", alors il DOIT avoir un "état".

Mes sentiments ont été encore plus réconfortés par cette question SO :ADO EF - Associations de mappage d'erreurs entre les types dérivés dans TPH

J'essayais en fait cette solution de contournement (avant même de la trouver), et la solution de contournement ne fonctionne pas pour moi. J'ai même essayé de changer toutes les relations de 1..* à 0..*, et toujours pas de chance.

Perdant trop de temps ici, je suis retourné au TPT.

À la fin de la journée, avec TPH, j'aurais eu une table ridiculement grande, avec beaucoup, beaucoup de colonnes redondantes et nullables. JOIN-wise, c'est plus efficace. Mais au moins avec TPT, je ne suis pas obligé d'avoir des FK nullables et auto-référencés.

Si quelqu'un a une solution à ce problème, faites le moi savoir. Mais jusque-là, je m'en tiens au TPT.