Vous pouvez également le faire avec des points de vue (et d'un serveur lié, si l'autre db est sur un autre serveur). Cela vous évitera d'avoir à gérer/fusion de deux edmx fichiers. J'ai utilisé cela avec un serveur lié pour la lecture de données à partir d'un deuxième db sur un autre serveur, mais a couru quelques tests pour voir si des mises à jour/insertions/suppressions sont possibles et qu'elles sont.
J'ai zéro expérience avec des transactions distribuées afin que l'information relative aux transactions distribuées peut être bon, mauvais, ou un peu des deux. Si vos deux db sont sur le même serveur que je ASSUMER les transactions distribuées ne s'appliquent plus.
Il ya un couple de choses à garder à l'esprit lors de l'utilisation d'un serveur lié.
- Lorsque vous modifiez les entités dans la db tables et appelez -
SaveChanges
sur votre contexte, ce sera d'essayer de démarrer une transaction distribuée de sorte que si quelqu'un sait comment faire pour arrêter cela, vous devez vous assurer que les deux serveurs sont configurés pour gérer les transactions distribuées. (Je suppose que cela serait vrai à l'aide de synonymes trop).
- Inserts sur les entités avec les colonnes d'identité sur le serveur lié lever une exception parce que ef essaie d'obtenir la nouvelle carte d'identité à l'aide de
SCOPE_IDENTITY()
et il est nul. Je ne sais pas si il y a un moyen de contourner cela. Je n'ai pas de problèmes de mise à jour ou la suppression d'entités sur le serveur lié avec les colonnes d'identité.
Sur SQL Server
- créer un serveur lié sur le serveur b (sauter cette étape si les db sont sur le même serveur).
- créer une vue en
[ServerA].[MyDB]
pour chaque table en [ServerB].[AnotherDB]
vous souhaitez accéder
Dans EDMX
- Ajouter votre avis pour le fichier edmx
- Clairement l'entité paramètre de clé de chaque propriété dans le concepteur (y compris la réelle pk)
- Réinitialisation de l'entité clé pour le pk
- Ajouter les associations en tant que de besoin
- Enregistrer les modifications
Pour Les Mises À Jour/Insertions/Suppressions
- cliquez droit sur votre fichier edmx et l'ouvrir avec l'éditeur xml
- Accédez à l'
StorageModel
-> Schema
-> EntityContainer
- Trouver l'entityset pour votre entité et de supprimer l'
DefiningQuery
élément
- Trouver l'
store:Schema
l'attribut de l'entité et de supprimer store:
alors que c'est juste Schema
. Quitter sa valeur à lui seul.
- Répétez les étapes 3 et 4 pour chaque point de vue à partir du serveur lié
- Enregistrer les modifications
Parce que l'utilisation d'un serveur lié crée une transaction distribuée que j'avais à faire à un couple de choses sur l' ObjectContext
avant SaveChanges
a été couronnée de succès.
ctx.Connection.Open();
ctx.ExecuteStoreCommand("set xact_abort on");
ctx.SaveChanges();
ctx.Connection.Close();
Vous pouvez probablement de créer un personnalisé, ObjectContext
et remplacer SaveChanges
ajouter ce genre de choses dans.