【问题标题】:How do I adapt the Entity Framework POCO T4 template to create classes in a separate project?如何调整实体框架 POCO T4 模板以在单独的项目中创建类?
【发布时间】:2012-12-19 15:14:36
【问题描述】:

我喜欢在项目中将我的代码或 T4 生成的 POCO 与 DbContext 分开。这有助于我确保我的实体类不与任何一种数据访问服务耦合。

当我创建一个新的 DB first EDMX 模型时,向导会生成一个 T4 模板来生成与 DbContext 相同的项目中的所有 POCO。如何修改此模板以将类添加到单独的项目中?

仔细检查后,将 DbContext 移动到新项目可能会容易得多,但是 T4 没有调用 fileManager.StartNewFile 所以我不知道从哪里开始告诉它在其他地方创建文件.

【问题讨论】:

  • ProfK,您能说明一下您是如何将 poco 生成到一个单独的项目中的吗?我正在尝试使用 EF 和洋葱做同样的事情
  • @jr3 我不记得了,但我想我只是更改了 EF 向导使用的 .tt 的输出路径。

标签: entity-framework t4 entity-framework-5 edmx


【解决方案1】:

您可以从 DAL 项目中排除 .tt 文件,然后将其作为链接添加到另一个项目中。

这意味着您不必更改模板,因为它可以看到您的模型。

运行模板时生成的文件将包含在您的数据对象程序集中,尽管物理文件将在您的 DAL 项目中。

唯一的缺点是您必须在更新模型时手动运行自定义工具。

【讨论】:

  • @atconway 右键单击​​解决方案资源管理器中的.tt 文件并“运行自定义工具”
  • 由于物理文件现在驻留在单独的项目中(根据需要),但我的 MyModel.context.cs 文件位于带有 .edmx 的原始项目中,我如何让它知道文件已重新定位的位置到?我添加了对单独项目的引用,但没有在我的 Context 文件中将 using 语句放置到新项目命名空间中,这样的行会失败:public DbSet<Person> People { get; set; } 它需要看起来像 public DbSet<MyProject.DAL.Person> People { get; set; } 虽然这是自动生成的代码并且我不想这样做。
  • 刚刚发现 - Context.tt 属性上的 Custom Tool Namespace 值可以更新为正确的引用,即MyProject.DAL,并且引用将解析。
【解决方案2】:

我说:

1.- 在您的模型项目 (MyProject.Model proyect) 中创建一个文件,一个具有所需名称的 .tt 文件...(本示例为 MyModel.tt)

2.- 进入 DAL 项目,打开 WhatModel.tt 文件并将内容复制到 MyModel.tt...

3.- 从 DAL proyect 中删除whateverModel.tt。

4.- 在 MyModel.tt 中查找:

const string inputFile = @"WhateverModel.edmx";

5.- 并将其替换为:

const string inputFile = @"..\TheRelativeRouteToYourEdmxFileGoesHere.edmx";

6.- 并且...运行自定义工具来生成您的模型。

注意: 7.- 当然,您将不得不更改一些 using 指令和命名空间,但它对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多