Séparer POCO classes d'Objets et DBContext de Entity Framework 6 Modèle
J'ai commencé à utiliser Entity Framework version 6.0.1. Je veux séparer les générées DbContext et POCO modèle de classes différentes de la bibliothèque de classes du modèle. J'ai passé quelques heures à résoudre le problème, sans succès.
Si je créer une nouvelle bibliothèque de classe, ajouter EF 6 EntityObject Générateur et remplissez les champs suivants variable de modèle:
SourceCsdlPath = @"..\..\DataAccess\Model.edmx"
,
Obtiens l'erreur suivante dans la liste d'erreurs après la construction:
Erreur 2 Exécution de la transformation: la transformation du Système.IO.FileNotFoundException:
Impossible de localiser le fichier nom du fichier:
'C:\Source\EFsource\POCO....\DataAccess\SZOSZRDBModel.edmx'Serveur de trace de pile: à
Microsoft.VisualStudio.TextTemplating.VSHost.TextTemplatingService.ResolvePath(String
chemin d'accès) à
Système.Moment de l'exécution.L'accès distant.De messagerie.StackBuilderSink._PrivateProcessMessage(IntPtr
md, Object[] args, serveur d'Objet, Object[]& argssortie) à
Système.Moment de l'exécution.L'accès distant.De messagerie.StackBuilderSink.SyncProcessMessage(IMessage
msg)Exception renvoyé à [0]:
Système.Moment de l'exécution.L'accès distant.Les procurations.RealProxy.HandleReturnMessage(IMessage
reqMsg, IMessage retMsg) à
Système.Moment de l'exécution.L'accès distant.Les procurations.RealProxy.PrivateInvoke(MessageData&
msgData, type Int32) à
Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost.ResolvePath(String
chemin d'accès) à
Microsoft.VisualStudio.TextTemplating31479401930D2C4820acf71c66b5389a24a5053726798d9718db676b3ffa30a3454b3cb1ede2e1c267d5278b1528860c072e81a0e4647bc23993669604048fcd.GeneratedTextTransformation.ApplyUserSettings(UserSettings
userSettings) à
Microsoft.VisualStudio.TextTemplating31479401930D2C4820acf71c66b5389a24a5053726798d9718db676b3ffa30a3454b3cb1ede2e1c267d5278b1528860c072e81a0e4647bc23993669604048fcd.GeneratedTextTransformation.TransformText()
Le message d'Erreur est clair, mais je ne sais pas, la façon de définir le Modèle de chemin sans chemin d'accès absolu.
Je ne suis pas sûr, en utilisant la version la plus récente de l'entity framework est la meilleure idée...
@"\..\..\DataAccess\Model.edmx"
?Je ne comprends pas votre question. Je veux mettre un autre dossier de projet, mais je ne peut pas naviguer dans l'arborescence de répertoire.
OriginalL'auteur Concware | 2013-12-01
Vous devez vous connecter pour publier un commentaire.
Des chemins absolus ne sont pas nécessaires. Il ressemble à votre chemin d'accès relatif est pas correct. Je suis à l'aide de EF6.1 et j'ai les classes POCO dans un projet distinct. C'est comment je l'ai eu à travailler dans VS 2013.
ADO.NET Entity Data Model
. Ce projet contiendra lesDB Context
.EF6.x DbContext Generator
élément à laDBContext
projet.POCO
objets.[Project Name]Model.tt
fichier à partir de laDbContext
projet à laPOCO
projet.[Project Name]Model.tt
fichier. Sur la ligne 5, j'ai changé:const string inputFile = @"SampleModel.edmx";
à:
const string inputFile = @"..\DbContext\SampleModel.edmx";
DbContext
projet à laPOCO
projet.Si vous utilisez VS 2013, vous pouvez déboguer le modèle pour voir comment votre chemin d'accès relatif est en cours de résolution.
.tt
fichier..tt
fichier dans l'Explorateur de solutions et sélectionnez "Debug Modèle T4".votre pocos-ils des types de base, comme ils le font dans EF4? En DB Première approche, pocos générés sont tous marqués comme partielle, mais n'a pas l'air comme ils sont obtenus à partir de rien du tout.
Bira, mon DTO ne pas hériter de toute la classe... l'partielle mot-clé me permet de répandre la définition d'une classe dans plusieurs fichiers. Quand j'ai besoin de régénérer mon DTO, le modèle T4 va remplacer le code généré les fichiers, mais mon "main de l'ouvrage" un fichier ne sont pas affectés. J'ai modifier le modèle T4 de générer des fichiers avec la convention d'appellation suivante: [nom de la classe].de la base.cs. J'ai ensuite créer des classes nommé [nom de la classe].cs. Le non-fichiers générés étendre la "base" des fichiers générés avec les interfaces. Je peux donner un exemple concret, si vous êtes intéressés.
Je pense que vous avez aussi besoin de changer l'Outil Personnalisé de l'espace de Noms dans le *.tt les propriétés de fichier pour correspondre à l'espace de noms par défaut dans le projet qui contient le fichier edmx.
Le
DbContext
projet nécessite une référence à laPOCO
projet, mais ensuite, si lePOCO
projet veut faire quelque chose d'utile, il faudra de référence de laDbContext
projet qui entraîne une dépendance circulaire qui n'est pas autorisé. Je suppose que votre " POCO projet est juste un autre sous-projet au sein de votre projet d'application.OriginalL'auteur fremis