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

2024-04-28

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

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


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

  • Assembly A
    • 数据库.EDMX
    • 型号.TT
    • 模型.cs
  • Assembly B
    • 数据库.EDMX (添加为链接 http://msdn.microsoft.com/en-us/library/9f4t9t92(VS.80).aspx到程序集 A 中的真实文件)
    • 实体容器.TT
    • 实体容器.cs

这就是一切的安排。这些是粗略的步骤:

  1. 右键单击 A 中的 EDMX(公共 API 程序集)并添加代码生成文件
  2. 将 TT 添加到项目中。将其称为模型,因为它仅包含模型。
  3. 编辑了 TT 并删除了实体容器的代码生成
  4. 在程序集 B(内部实现)中添加 Database.EDMA 作为链接
  5. 在程序集B中打开,右键单击并添加代码生成文件
  6. 将 TT 添加到项目 B。将其称为 EntityContainer,因为它将仅包含该 TT。
  7. Edited TT to do the following
    • 删除了实体创建步骤
    • 将 Database.EDMX 的路径更改为指向 A 中原始副本的相对路径
    • Added 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 模板将代码发送到另一个项目中?”如果你能做到这一点,那么你就可以做你想做的事。但请注意,这在 EF 4 中要容易得多 http://blogs.msdn.com/efdesign/archive/2009/01/22/customizing-entity-classes-with-t4.aspx.

因此,我认为如果您直接提出这个问题,您可能会得到有用的反馈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不同程序集中的实体容器和模型生成 的相关文章

随机推荐

  • Java HashSet 具有自定义相等标准? [复制]

    这个问题在这里已经有答案了 我一直在寻找类似于 Java TreeSet 在实例化时接收自定义比较器的能力 因此我不需要使用对象的默认相等 和哈希码 标准 我能想到的最接近的方法是将我的对象包装在一个私有的自定义类中 但这看起来很老套 这最
  • GSON 预期为 BEGIN_ARRAY,但实际为 BEGIN_OBJECT

    当我仅收到列表中的一项时 我收到此错误 我在服务器端 REST Web 服务中使用 Jersey 只有当列表返回一个元素并且它具有0 elements I get java lang NullPointerException但是当它有多个时
  • 仅使用整数求平方根

    最近 我在某人的编程课上遇到了一个问题 它要求他们仅使用整数来计算平方根 他们用一个整数来表示小数点之前的部分 用另一个整数来表示小数点之后的部分 问题说不允许使用浮点数 然而 经过一段时间的思考 我似乎无法想出一种不使用浮点的方法 我用谷
  • 如何在 Angular 2 中动态更改 :host 中的 CSS?

    如何动态更改组件宿主的 CSS 属性 我有一个组件 在它的 CSS 中我给了它一个样式 host overflow x hidden 在子组件中单击按钮时 我需要添加overflow y hidden到主机组件 我如何实现这种行为 这是一个
  • 为什么 res.end 和 res.send 的字体不同?

    我有以下最小的基本 Express Node js 应用程序 var express require express var app express app get function req res res send Hello app l
  • C++变量声明和初始化规则

    考虑以下声明和初始化类型变量的方法C C c1 C c2 c2 C C c3 C C c4 C 所有这些是否完全等同 或者其中一些可以根据确切的定义而有所不同C 假设它有公共默认值和复制构造函数 这些意味着 C c1 default con
  • 我可以删除 Windows Azure 表存储中的整个分区吗?

    我在分区中有一组行 代表一些缓存的数据 我想刷新该缓存而不关心已经存在的内容 是否可以删除整个分区而无需执行任何选择 不 但您可以删除整个table只需一次调用 因此您可能会考虑将分区改为单独的表 但是 当然 您不能进行跨表查询
  • 打开文件对象的大小

    有没有办法找到当前打开的文件对象的大小 具体来说 我正在使用 tarfile 模块来创建 tarfile 但我不希望 tarfile 超过特定大小 据我所知 tarfile 对象是类似文件的对象 所以我想通用的解决方案会起作用 ls la
  • 测试方法的存在性

    我正在尝试使一些现有的 JS 向后兼容 如果一个方法不存在 我需要重写它 否则只返回现有的方法 这是我到目前为止的代码 this grid getDataSource function if getDataSource undefined
  • 使用useReducer时如何避免耦合?

    为了防止将回调传递给我正在使用的子组件useReducer反而 这避免了子组件在每个父渲染上重新渲染的问题 但缺点似乎是父组件和子组件之间的紧密耦合 通过紧密耦合 我的意思是子级需要明确了解父级定义的减速器所期望的操作的形状 例如 想象一个
  • C# 中是否有相当于 php array_merge 的函数

    如果不是 创建它的最佳方法是什么 注意 合并不仅仅是附加 它融合了相同的键 此功能存在于 List 元素上 在 C 中 数组是固定宽度的项 因此在不创建新数组的情况下无法修改大小 然而 列表却是另一回事 你可以做 List
  • 添加原始哈希以在 git rebase 上提交(使用新根)

    我有一个代码库 以前用 SVN 管理 但现在用 git 管理 当代码迁移到 git 时 历史记录就丢失了 我已经设法恢复 SVN 历史记录 https stackoverflow com questions 79165 现在我正在努力git
  • 如何使用 unarchivedObjectOfClass:fromData:error: 取消归档数据?

    我在用unarchiveObjectWithData从中取消存档数据NSUserDefaults它运行良好 但在 iOS 12 0 中已被弃用 Xcode 建议使用unarchivedObjectOfClass fromData error
  • 从字典返回类属性的数组

    Background 最近试图回答一个question https stackoverflow com q 58835358 9758194 我自己在想是否可以直接从字典项返回类对象属性的数组 Code Imagine TstClass作为
  • AJV自定义关键字验证

    我正在使用 AJV 库来验证我的 JSON 架构 我希望能够验证Startdate成为一个字符串 如果不是字符串 则应将其转换为N A 目前 它仅转换undefined to N A 但是 在这些情况下 它不会按预期工作 null gt 空
  • 在 Selenium Node JS 中打开 gecko 驱动程序的日志记录

    我目前正在使用Selenium 与 Node Js and FireFox并想打开日志记录功能壁虎司机 但我不确定如何 另外我还想知道在哪里可以找到日志 目前这是我实例化驱动程序的方式 var fOptions new firefox Op
  • .net 日历 - 使整个单元执行回发(可点击)

    我已经启动并运行了一个 net 日历 并从数据库中获取信息 默认情况下 天数会应用回发操作 我想做的是将该操作应用于整个单元格 这样用户就不需要仅单击文本链接 我是 dayRenderer 操作 我有以下行来尝试复制该操作 但第二个参数我不
  • 如何强制操作系统收回内存? (C++)

    在我的 C 代码中 我分配了大量内存来创建树 然后在每个节点中使用 删除 来释放内存 删除所有内容后 我检查操作系统使用的内存量 发现内存未释放 这是预期的 因为该进程不会立即将内存返回给操作系统 因为它仍然可能会再次使用它 问题是 我在删
  • 您可以通过 facebook graph api 来控制和定位页面帖子吗?

    Enabling post privacy gating in the Page s privacy settings allows creating of posts with separate Gating and Targeting
  • 不同程序集中的实体容器和模型生成

    我正在做一些重构 并尝试重用我生成的实体模型 我的应用程序有一些程序集 其中一个是我的外向公共类型 API 另一个包含提供程序的实现 例如日志 我想拆分实体和模型的生成 以便实体位于 API 程序集中 容器位于实现程序集中 这可能吗 有可能