在使用LINQ to SQL时,如何抽象出持久性代码?

Nat*_*ley 6 .net linq-to-sql

我喜欢LINQ to SQL但它一直困扰我,在使用它时,我的存储库代码由LINQ to SQL框架生成,因此与SQL Server数据库紧密耦合.

你是否有人以抽象的,松散耦合的方式使用LINQ to SQL,如果是这样,你是如何解决保持代码数据库无关的问题的?

Mar*_*ell 3

为了我自己; 我很乐意重用 LINQ/dbml 生成的对象模型,因为实际上这些属性不会伤害我,并且任何其他实现都可以提供足够相似的模型 - 但我不使用我的数据上下文在 DAL 之外。所以我有类似的东西:

  • IFooRepository- 使用生成的 dbml 对象和一些 POCO 模型类定义可用的方法
  • FooRepository- 了解数据上下文的实现

我的存储库方法不公开 LINQ 概念,例如IQueryable<T>Expression<...>,因为它们是有漏洞的抽象;其他实现的工作方式会有所不同(例如,EF 支持两者的不同方面)。

此外 - 我已经将大多数关联属性标记为内部属性,并且仅在 DAL 查询期间使用它们(在 OO 工作期间不使用它们)。

我可以映射到纯 POCO,但我没有看到好处。我对此有更多想法:Pragmatic LINQ