2010-02-05 7 views
1

Je travaille actuellement avec une base de données volumineuse (environ 500 tables) toutes sans clé étrangère.Entity Framework sur une base de données sans clés étrangères

Ma question est là un moyen facile de mettre en place les relations au sein de l'infrastructure de l'entité (version 1 ou 2) sans tout faire manuellement?

Certaines tables ont également un type de relation complexe. Par exemple, un client a un parentID, mais il peut soit créer un lien vers un autre client dans la même table (customerID), soit créer un lien vers un compte dans une table de compte (accountID). Ce type de relation est-il possible dans un cadre d'entité?

Si ce n'est pas possible ou si quelqu'un a des opinions sur une solution alternative à Enitity Framework, je suis plus que ouvert aux idées. NHibernate ou Active Record sera-t-il une meilleure solution? Ou sera-t-il plus facile de créer mon propre objet métier et accès aux données?

Vive

Simon

+0

Quelles conventions de dénomination utilisez-vous? Utilisez-vous des noms uniques et correspondants pour toutes les colonnes qui représentent une relation? (par exemple, person.person_id, employee.employee_id, order.order_id, order_details.order_id, order_details.product_id, product.product_id)? Si non, y a-t-il autre chose qui peut être utilisé pour déterminer ce que devraient être les FK inexistants? – KristoferA

Répondre

6

Si vous n'avez pas de clés étrangères définies, alors il n'y a aucun moyen pour le Entity Framework pour déduire les relations. Vous devrez les définir manuellement.

Quant à votre deuxième question ... non. Ce genre de relation n'est pas possible (c'est aussi un mauvais choix de conception). Il me semble, à moins que vous ne vouliez refactoriser votre base de données et implémenter une conception qui a des relations de clé étrangère, vous allez devoir rouler vos propres objets Business Objects et Data Access Layer.

+0

Je dirais que la relation étrange est possible pour un expert de cartographier, mais ne vaut pas l'effort vs la réparation. –

+0

@Craig Ce serait une expérience intéressante. Je ne sais pas comment EF appliquerait un champ ayant un parent qui pourrait être un type ou un autre (bien sûr, vous pourriez écrire le code dans la classe partielle vous-même ... mais cela va à l'encontre du but). –

+0

La relation de base de données existante est effectivement unidirectionnelle: vous pouvez naviguer de manière semi-fiable d'un client parent vers un client enfant ou d'un compte vers un client enfant. Vous pouvez donc également faire une relation EF (possible dans EDMX dans EF 1 mais pas dans GUI, dans EF 4 dans GUI pour les relations unidirectionnelles). –

Questions connexes