gpt4 book ai didi

assemblies - 不同程序集中的实体容器和模型生成

转载 作者:行者123 更新时间:2023-12-01 05:46:08 25 4
gpt4 key购买 nike

我正在做一些重构,并试图重用我生成的实体模型。我的应用程序有几个程序集,一个是我面向外部的公共(public)类型 (API),一个包含提供程序的实现(例如日志)。

我想拆分实体和模型的生成,以便实体将在 API 程序集中,容器将在实现程序集中。这可能吗?

是可能的。我就是这样做的。

  • 大会 A
  • 数据库.EDMX
  • 型号.TT
  • 模型.cs
  • 大会 B
  • Database.EDMX(Added as a Link 到程序集 A 中的真实文件)
  • 实体容器.TT
  • EntityContainer.cs

  • 一切都是这样布置的。这些是粗略的步骤:
  • 右键单击 A(公共(public) API 程序集)中的 EDMX 并添加代码生成文件
  • 将 TT 添加到项目中。称之为模型,因为它只包含模型。
  • 编辑了 TT 并删除了实体容器的代码生成
  • 在程序集 B(内部实现)中添加了 Database.EDMA 作为链接
  • 在程序集 B 中打开,右键单击并添加代码生成文件
  • 将 TT 添加到项目 B。将其命名为 EntityContainer,因为它只包含它。
  • 编辑 TT 以执行以下操作
  • 删除了实体创建步骤
  • 将 Database.EDMX 的路径更改为指向 A
  • 中原始副本的相对路径
  • 添加了 using对于我的模型

  • 希望这一切都能编译并正常工作(我离编译和测试所有东西还很远)。到目前为止看起来不错。

    附加变化​​:

    在我的实体容器 TT 中,我必须将 EscapeEndTypeName 的定义修改为以下内容:

    string EscapeEndTypeName(AssociationType association, int index, 
    CodeGenerationTools code)
    {
    EntityType entity = association.AssociationEndMembers[index]
    .GetEntityType();
    return code.CreateFullName(
    code.EscapeNamespace(association.NamespaceName), code.Escape(entity));
    }

    我正在使用 association.NamespaceName因为它包含来自其他程序集的正确命名空间。

    最佳答案

    我不知道答案,但我认为您的问题本质上等同于“是否有可能导致一个项目中的 T4 模板将代码发送到另一个项目?”如果你能做到这一点,那么你就可以做你想做的事。但请注意,this is substantially easier in EF 4 .

    所以我认为如果你直接问这个问题,你可能会得到有用的反馈。

    关于assemblies - 不同程序集中的实体容器和模型生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2104641/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com