从Entity Framework 6 Model中分离POCO Object类和DBContext

我开始使用Entity Framework 6.0.1版本。 我想将生成的DbContext和POCO模板类与模型中的不同类库分开。 我花了几个小时解决问题但没有成功。

如果我创建一个新的类库,添加EF 6 EntityObject Generator并填充以下模板变量:

SourceCsdlPath = @"..\..\DataAccess\Model.edmx"

构建后在错误列表中获取以下错误:

错误2运行转换:System.IO.FileNotFoundException:无法找到文件文件名:’C:\ Source \ EFsource \ POCO …. \ DataAccess \ SZOSZRDBModel.edmx’

服务器堆栈跟踪:位于System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md,Object [] args,Object server,Object []和outArgs)的Microsoft.VisualStudio.TextTemplating.VSHost.TextTemplatingService.ResolvePath(String path)在System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)

在[0]处重新抛出exception:位于Microsoft.VisualStudio的System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&msgData,Int32类型)的System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)。 TextTemplating.ITextTemplatingEngineHost.ResolvePath在Microsoft.VisualStudio.TextTemplating31479401930D2C4820ACF71C66B5389A24A5053726798D9718DB676B3FFA30A3454B3CB1EDE2E1C267D5278B1528860C072E81A0E4647BC23993669604048FCD.GeneratedTextTransformation.ApplyUserSettings(userSettings userSettings)(字符串路径)在Microsoft.VisualStudio.TextTemplating31479401930D2C4820ACF71C66B5389A24A5053726798D9718DB676B3FFA30A3454B3CB1EDE2E1C267D5278B1528860C072E81A0E4647BC23993669604048FCD.GeneratedTextTransformation.TransformText()

错误消息是明确的,但我不知道,如何设置模型路径没有完整的绝对路径。

我不确定,使用最新版本的entity framework是最好的主意……

绝对路径不是必需的。 看起来你的相对路径不正确。 我正在使用EF6.1,我在一个单独的项目中有POCO类。 这就是我在VS 2013中使用它的方法。

  1. 创建了一个类库项目并添加了一个ADO.NET Entity Data Model 。 该项目将包含DB Context
  2. DBContext项目中添加了新的EF6.x DbContext Generator项。
  3. 创建了一个新的类库项目。 该项目将包含POCO对象。
  4. [Project Name]Model.tt文件从DbContext项目移动到POCO项目。
  5. 编辑了[Project Name]Model.tt文件。 在第5行,我改变了:
    const string inputFile = @"SampleModel.edmx";
    至:
    const string inputFile = @"..\DbContext\SampleModel.edmx";
  6. DbContext项目中添加了对POCO项目的引用。

如果您使用的是VS 2013,则可以调试模板以查看相对路径的解析方式。

  1. .tt文件中添加断点。
  2. 右键单击解决方案资源管理器中的.tt文件,然后选择“调试T4模板”。