Changement de nom de schéma sur l'exécution, Entity Framework
J'ai besoin de changer le schéma de stockage des entités d'exécution.
J'ai suivi un poste merveilleux, disponible ici:
http://blogs.microsoft.co.il/blogs/idof/archive/2008/08/22/change-entity-framework-storage-db-schema-in-runtime.aspx?CommentPosted=true#commentmessage
Cela fonctionne parfaitement, mais seulement pour les requêtes, pas de modifications.
Aucune idée pourquoi?
Vous devez vous connecter pour publier un commentaire.
Bien, je cherchais ce morceau de code tout autour de l'Internet. À la fin, j'ai dû le faire moi-même. Il est basé sur Brandon Haynes adaptateur, mais cette fonction est tout ce que vous devez modifier le schéma de l'exécution - et vous n'avez pas besoin de remplacer le générés automatiquement contexte des constructeurs.
L'résultant EntityConnection doit être passé en paramètre lors de l'instanciation du contexte. Vous pouvez le modifier, de sorte que tous lsed modèles sont modifiées par cette fonction, non seulement de ce qui est indiqué.
StorageMappingItemCollection
?XNamespace storageNS = storageXml.Attribute("xmlns").Value;
Ce qui permet une dynamique de l'espace de noms à utiliser plutôt que l'un fixe, comme dans l'exemple.J'ai réussi à résoudre ce problème en utilisant un brillant bibliothèque, située dans CodePlex (avec l'aimable autorisation de Brandon Haynes), nommé "Entity Framework Runtime Modèle de Carte", disponible ici:
http://efmodeladapter.codeplex.com/
J'ai modifié un peu, pour s'adapter à nos besoins, et sans besoin de remplacer le code du designer à tous.
Donc, je suis bon.
Merci de toute façon, et en particulier à la ville de Brandon, travail incroyable!
J'ai besoin d'importer des données à partir de la base de données postgres. Par défaut, utiliser le schéma "public". Donc j'utilise Entity Framework CTP 4 "le premier Code". Par défaut, utiliser le schéma "dbo". Pour le changer lors de l'exécution j'utilise:
- Il travailler pour sélectionner, insérer, mettre à jour et supprimer des données. Alors, la prochaine test pass:
Pas une réponse en soi, mais un suivi sur Jan Matousek de Créer[EntityConnection] méthode expliquant comment les utiliser à partir d'un DbContext. Note DB est le DbContext type passé le générique référentiel.
J'ai été en mesure de convertir la solution de Jan Matousek de travailler dans vb.net 2013 avec entity framework 6. Je vais aussi essayer d'expliquer comment utiliser le code dans vb.net.
Nous avons un JD Edwards Base de données qui utilise le Schéma différent pour chaque environnement (TESTDTA, CRPDTA, PRODDTA). Cela rend la commutation entre les environnements lourd que vous devrez modifier manuellement l' .fichier edmx si vous souhaitez modifier les environnements.
Première étape consiste à créer une classe partielle qui permet de passer une valeur pour le constructeur de votre entités, par défaut, il utilise les valeurs de votre fichier de configuration.
Prochaine créer la fonction qui va modifier votre schéma de magasin .lsed fichier en mémoire.
Assurez-vous que le storageNS espace de noms codés en dur la valeur correspond à celle utilisée dans votre code, vous pouvez voir le débogage du code et l'examen de la storageXML variable pour voir ce qui a été utilisé.
Maintenant, vous pouvez passer à un nouveau nom de schéma, et différentes de la base de données des infos de connexion au moment de l'exécution lorsque vous créez vos entités. N'est plus manuelle .edmx changements requis.
Ces furent les .net bibliothèques utilisées:
Espère que ça aide quelqu'un là-bas avec les mêmes problèmes.
J'ai eu beaucoup de problèmes se présente au travail lors de l'utilisation de EF6 avec un Service de Données OData, j'ai donc dû trouver une autre solution. Dans mon cas, je n'ai pas vraiment besoin de le faire à la volée. J'ai pu m'en sortir avec la modification du schéma lors du déploiement de certains environnements de test, et dans le programme d'installation.
Utilisation Mono.Cecil de réécrire l'embedded
.ssdl
ressources directement dans la Dll. Cela fonctionne bien dans mon cas.Voici un exemple simplifié de la façon dont vous pouvez faire ceci: