【问题标题】:Should I duplicate my Entity Model?我应该复制我的实体模型吗?
【发布时间】:2010-11-15 22:52:42
【问题描述】:

让我设置我的 LOB 场景。

我正在重写我们的核心业务应用程序。要求是我创建一个内部可用的应用程序(我想使用 Silverlight),我们的员工每天都在使用它。我还需要提供一个 SOAP 服务,可以用来输入订单、获取发票等。

我也将分段执行此操作,因此当我更新新 SQL Server 数据库中的记录时,我需要确保也更新我们的旧 SQL Server。

因此,创建一个 DAL 以从新的 SQL 服务器中提取数据并回写到 2 个数据存储区当然是有意义的。

创建一个可供 Silverlight/RIA 和 WCF Web 服务使用的 BLL 也是有意义的。

我在自己的项目中创建了新数据库的数据实体,并在所有其他项目中使用。这里的问题是 RIA 似乎要求我在 ASP.Net 项目中直接创建它,以便获取 Silverlight 的元数据。如果没有这个,我需要手动重新创建 Silverlight 的元数据才能正确访问它。

那么我的问题是,我应该创建实体模型的副本吗?一个用于 RIA,一个用于其他所有内容?有一个更好的方法吗?我应该放弃使用 RIA 并让 Silverlight 访问 WCF 服务吗?还是我应该继续在 RIA 中复制元数据?

【问题讨论】:

  • 顺便说一句,2/13 标记为已回答的问题有点低,您可能需要改进 :)
  • 哎呀....有点新。我会通过并标记它们。感谢您的提醒!

标签: silverlight entity-framework metadata ria


【解决方案1】:

我们使用实体直接引用存储和数据传输对象 (DTO),它们在 BLL 和 WCF/GUI/等之间来回传递几乎相同。我们使用AutoMapper 在两者之间进行映射,这意味着几乎没有额外的工作,但我们不必担心给定实体是否附加到上下文/跟踪状态更改/等...

编辑:您肯定希望尽可能将代码保留为DRY。就个人而言,我会考虑在 BLL 之上使用 DTO,或者拥有 2 组在 DAL 中协调的存储库(一个 RW,一个 W 仅)。甚至拥有自己处理这两个商店上的数据集的元存储库。

如果您还没有使用它,Unity 和 IoC 将在这里为您带来真正的好处。您可能还想使用一种模块化代码模式来允许您以不同的模式注册 [n] 个数据存储,这样当您最终想要淘汰旧存储时,您不需要做太多工作。

我还想问您的实体是否需要在 ASP.Net 中定义 - 您可以简单地从您的实体/DTO 项目中引用适当的 DLL 并添加适当的标记/配置

【讨论】:

  • 重新阅读 Q,这可能不是合适的答案 - 立即编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 2012-02-21
  • 2011-05-03
  • 2019-10-30
  • 2013-08-16
  • 2013-01-22
相关资源
最近更新 更多