2010-09-01 5 views
0

Entity Framework 4 me rend fou, cette situation est:Entity Framework 4 many to many liaison

entité employés - plusieurs à plusieurs association - entité Département

Je reçois des employés de la EmployeeRepository et les ministères de le DepartmentRepository. Chaque référentiel utilise son propre contexte de données. Mon interface utilisateur dispose d'une liste de départements (à partir du DépartementRepository) à sélectionner pour un employé. Lorsqu'un département est sélectionné pour un employé, il lie un département à partir du contexte de données DepartmentRepository. Lorsque j'essaie de sauvegarder un employé, il se plaint d'une exception géniale.

Je dois conserver le contexte de données pour les départements séparé du contexte de données pour les employés, car les départements peuvent être modifiés et l'appel des modifications d'enregistrement sur DepartmentRepository ne peut pas également enregistrer l'employé.

Les contextes de données distincts fonctionnent parfaitement pour mon association many to 0 ou 1 car je peux simplement lier la propriété Foreign Key et non l'instance d'entité. La seule solution envisageable consiste à réparer la collection dans l'association en créant un autre DepartmentRepository avec le même contexte de données que EmployeeRepository et en résolvant les départements DepartmentRepository avec les services extraits de DepartmentRepository avec le datasacontexte EmployeeRepository, mais c'est juste un design horrible et malodorant et une "solution" inacceptable. À ce stade, je ne me soucie pas de la stratégie de génération de code (bien que POCO serait bien), j'ai juste besoin de quelque chose qui fonctionne, et Entity Framework 4 n'est pas terrible à créer les définitions de modèle donc je voudrais rester avec.

+0

Pourriez-vous expliquer pourquoi vous n'utilisez pas le même contexte de données pour 'EmployeeRepository' et' DepartmentRepository'? – Jacob

+0

Jacob- J'ai besoin de garder les modifications de l'employé et des départements séparés car ils peuvent être modifiés simultanément. Si elles partagent le même contexte de données, une tentative pour en enregistrer un entraînera l'enregistrement de l'autre. Appeler enregistrer les modifications sur le département ne doit pas enregistrer les modifications apportées à l'employé et vice versa. Les départements ayant leur propre contexte de données me permettent également de synchroniser chaque contrôle d'interface utilisateur avec les services, car plusieurs employés peuvent être édités en même temps. L'ajout du département des ventes aux départements met automatiquement à jour le contrôle de l'interface utilisateur des départements sur toutes les instances de l'employé. –

Répondre

0

Vérifiez les méthodes Détacher et attacher sur le contexte. Vous pouvez détacher l'entité d'un contexte et l'attacher à un autre. Mais dans ce cas, vous perdez le suivi des modifications et vous devrez définir manuellement l'état de l'entité par context.ObjectStateManager.ChangeObjectState.

Mais vous devriez vraiment penser à la conception de votre application. Dans le scénario mentionné, vous ne devez pas utiliser deux contextes d'objets différents.

0

La cause première de votre problème est votre besoin de séparer les contextes de données entre vos deux référentiels. Pour gérer une relation plusieurs-à-plusieurs, EF s'appuie sur le fait que tout se passe dans un contexte d'objet unique.

Si vous avez vraiment besoin de faire respecter une séparation entre ces deux contextes, vous pouvez modéliser les nombreux à-plusieurs explicitement, par exemple avec un objet intermédiaire comme deux many-to-one relations:

Département - DepartmentEmployee - Employé

L'objet DepartmentEmployee est 'connu' dans les deux contextes. Grâce à DepartmentRepository, vous pouvez ajouter/supprimer des employés (via leur identifiant uniquement) et vice versa. Il ne doit pas y avoir de propriétés de navigation de DepartmentEmployee à Department ou Employee.

Questions connexes