C# 业务层在不知情的情况下处理Linq对象?

C# 业务层在不知情的情况下处理Linq对象?,c#,linq-to-sql,design-patterns,dependency-injection,C#,Linq To Sql,Design Patterns,Dependency Injection,我正在重构我的应用程序,以减少对数据源的依赖(目前我正在使用LINQtoSQL)。但是我喜欢LINQtoSQL从数据库中生成类的好方法,以及它跟踪变化的方式 如果这不是Linq,我会用一个接口包装这个类,然后让我的业务层依赖于这个接口。但是,我不能对linq这样做 假设我有一个存储库IFooRepository,其中Foos是数据库中的一个表,Linq为我生成了类Foo。如果我不关心依赖关系,我只会返回linq对象Foo。但是我的业务逻辑层没有关于Linq层的线索,所以我无法将这些对象注入BLL

我正在重构我的应用程序,以减少对数据源的依赖(目前我正在使用LINQtoSQL)。但是我喜欢LINQtoSQL从数据库中生成类的好方法,以及它跟踪变化的方式

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

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


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

这当然是可能的,尤其是对于LINQ到SQL。在这里,您需要做两件事:

  • 使用(参见和了解T4自动化)
  • 隐藏
    DataContext

  • 祝你好运。

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

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

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

    是的,实体可以实现接口。但是你如何让LINQ query支持工作呢?@Steven:我不知道你在问什么;接口实现不会影响组合查询的能力。OP的想法是,因为他的实体不能实现自定义接口,所以他不能使用存储库。既然不是这样,我想这就解决了这个问题。@Adam:OP希望能够在LINQ查询中使用这些对象。当然,您仍然可以在内存中对这些对象运行LINQ(到对象)查询。然而,当您查询
    IQueryable
    时,LINQtoSQL根本不知道该做什么。这根本行不通。您需要使用BLL中的
    YourEntityType
    ,才能执行复杂的LINQ查询(在数据库中运行)。@Steven:OP从未说过任何需要查询功能的事情,也没有合理假设他会这样做。@Adam:我在这里读到了字里行间的意思,但事实上,他没有明确表示他想要那样。