业务层处理Linq对象而不知道它?

时间:2011-04-05 20:14:45

标签: c# linq-to-sql design-patterns dependency-injection

我正在重构我的应用程序以减少对数据源的依赖(目前我正在使用Linq To Sql)。但我喜欢Linq To Sql从我的数据库中生成我的类以及跟踪更改的方式。

如果这不是Linq,我会用一个接口包装该类,然后让我的业务层依赖于该接口。但是,我不能用linq做到这一点。

所以假设我有一个存储库IFooRepository,其中Foos是数据库中的一个表,Linq为我生成了类Foo。如果我不打扰依赖关系,我会返回linq对象Foo。但我的业务逻辑层不知道我的Linq层,所以我不能将这些对象注入我的BLL。由于我的Linq对象无法实现任何接口,因此IFooRepository中的任何函数都不能返回IFoo实现。

所以,我想要的只是我的BLL处理Linq对象但不知道它,以便我的Linq Layer将跟踪BLL的变化。这可能吗?我正在考虑让一个类从Linq对象继承,然后使用它来传递。那会有效吗?

2 个答案:

答案 0 :(得分:2)

您的LINQ-to-SQL实体可以实现接口,您可以向它们添加任何您喜欢的功能。生成的实体是partial类,因此您可以在另一个文件中执行类似于此操作的操作,只要它是LINQ-to-SQL程序集的一部分:

public partial class YourEntityType : IInterfaceName
{
    // your implementation
}

您只需要在LINQ-to-SQL程序集和业务逻辑程序集引用的另一个程序集中定义契约。

答案 1 :(得分:1)

这当然是可能的,特别是对于LINQ to SQL。你需要在这里做两件事:

  1. 使用POCO objects(请参阅herehere进行T4自动化)。
  2. 隐藏DataContext behind an abstraction
  3. 祝你好运。