【问题标题】:C# DTO AND LINQ2SQLC# DTO 和 LINQ2SQL
【发布时间】:2009-03-15 22:26:13
【问题描述】:

这是我的第一个问题,温柔点:)。我正在从事具有某种分布式架构的项目。我正在尝试执行以下操作:

  1. 我有一个 数据访问 层 使用 LINQ2SQL

  2. 我有一个 服务层,它是 数据访问层的代理。

  3. 我有一个 业务层 调用服务层 实体。

    问题是如何将这些 LINQ2SQL 实体转移到我的业务层?

  4. 我想修改那些对象 业务层并使 与服务层一起返回 并将它们重新转换为 LINQ2SQL 实体将更改保留在 数据库。

    如果我要求一些不可能的事情,我很抱歉,但我试图找出最好的方法,但我自己无法得到一些聪明的东西:)

    最好的问候!

【问题讨论】:

  • 答案就在您的问题中 - 使用 DTO。那么,问题是什么?

标签: c# linq-to-sql dto


【解决方案1】:

在我看来,您有 2 个不同的上下文,即 BusinessLogic 上下文和数据访问域。您可能需要一个转换器/上下文映射器来从一个转换到另一个,反之亦然。

公共类 ContextMapper { 公共 BusinessLogic.Customer 转换(DataAccess.Customer 客户) {

} 公共 DataAccess.Customer 转换(BusinessLogic.Customer 客户) {

}

如果你愿意,你也可以把这些写成扩展方法

}

【讨论】:

  • 非常感谢!这是个好主意,我应该把这个映射器放在 BL 层中,并在 BL 中引用我的 LinQ2Sql 吗?
  • 由于您使用的是分层架构,并且您希望确保业务逻辑和 DAL 之间没有循环引用(因为您希望将 BL 对象转换为下游的 DAL 对象,反之亦然上游)你必须考虑依赖倒置的策略。
【解决方案2】:

听起来您需要 NHibernate 或其他更高级的 ORM。

【讨论】:

  • 但是我在 DAL 中使用 Linq2Sql,我想在层之间传递对象,以便在 BL 中使用它们,记住我使用服务层作为数据访问层的代理。我有点迷路了:(谢谢你的回答!
  • 好吧,您使用的是 Linq2Sql,这意味着您无法将 DAL 与 BL 分开。实体或域对象必须与 Linq 数据上下文位于同一程序集中,因为 linq2sql 就是这样工作的。
  • 当然,除非您从 BL 添加对 DAL 的引用。在这种情况下,您将无法拥有服务层。
猜你喜欢
  • 2010-11-22
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多