linq2sql - 在哪里登记事务(存储库或bll)?

时间:2010-03-25 13:16:21

标签: c# linq-to-sql repository

我的应用程序使用业务层调用使用linq to sql的存储库。

我有一个具有枚举类型属性和ItemDetail属性的Item类。

我需要实现一个删除方法:

(1)总是删除项目 (2)如果item.type是XYZ且ItemDetail不为null,则也删除ItemDetail。

我的问题是这个逻辑应该放在哪里?

如果我在我喜欢的业务逻辑中拥有它,这涉及两个独立的存储库调用,每个调用使用一个单独的datacontext。我必须包装两个调用是一个System.Transaction,它(在sql 2005中)被提升为一个不理想的分布式事务。

我可以将它全部移动到单个存储库调用,并且事务将由datacontext隐式处理,但是觉得这实际上是业务逻辑,因此不属于存储库。

思想?

卡丽

1 个答案:

答案 0 :(得分:0)

我不确定我是否真的理解你的问题,但如果它是一个单一的存储库 - 你可以让你的存储库公开两种不同的方法来处理这两种类型的删除吗?那么确定调用哪个存储库方法的逻辑将保留在最适合的业务层中?

或许你可以在这篇文章中找到一些帮助:Where should the transaction boundary be in a repository pattern?