我正在重构我的应用程序以减少对数据源的依赖(目前我正在使用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对象继承,然后使用它来传递。那会有效吗?
答案 0 :(得分:2)
您的LINQ-to-SQL实体可以实现接口,您可以向它们添加任何您喜欢的功能。生成的实体是partial
类,因此您可以在另一个文件中执行类似于此操作的操作,只要它是LINQ-to-SQL程序集的一部分:
public partial class YourEntityType : IInterfaceName
{
// your implementation
}
您只需要在LINQ-to-SQL程序集和业务逻辑程序集引用的另一个程序集中定义契约。
答案 1 :(得分:1)
这当然是可能的,特别是对于LINQ to SQL。你需要在这里做两件事:
DataContext
behind an abstraction。