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

时间:2013-12-01 22:14:51

标签: c# .net entity-framework-6

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

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

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

构建后在错误列表中收到以下错误:

  

错误2运行转换:System.IO.FileNotFoundException:   无法找到文件文件名:   'C:\源\ EFsource \ POCO .... \数据访问\ SZOSZRDBModel.edmx'

     

服务器堆栈跟踪:at   Microsoft.VisualStudio.TextTemplating.VSHost.TextTemplatingService.ResolvePath(字符串   路径)   System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr的   md,Object [] args,Object server,Object []& outArgs)at   System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(即时聊天   MSG)

     

在[0]处重新抛出异常:at   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(即时聊天   reqMsg,IMessage retMsg)at   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&安培;   msgData,Int32类型)at   Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost.ResolvePath(字符串   路径)   Microsoft.VisualStudio.TextTemplating31479401930D2C4820ACF71C66B5389A24A5053726798D9718DB676B3FFA30A3454B3CB1EDE2E1C267D5278B1528860C072E81A0E4647BC23993669604048FCD.GeneratedTextTransformation.ApplyUserSettings(UserSettings   userSettings)at   Microsoft.VisualStudio.TextTemplating31479401930D2C4820ACF71C66B5389A24A5053726798D9718DB676B3FFA30A3454B3CB1EDE2E1C267D5278B1528860C072E81A0E4647BC23993669604048FCD.GeneratedTextTransformation.TransformText()

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

我不确定,使用最新版本的实体框架是最好的想法......

1 个答案:

答案 0 :(得分:35)

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

  1. 创建了一个类库项目并添加了ADO.NET Entity Data Model。该项目将包含DB Context
  2. EF6.x DbContext Generator项目添加了新的DBContext项。
  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项目的引用。
  7. 如果您使用的是VS 2013,则可以调试模板以查看相对路径的解析方式。

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