Linq to sql 如果我稍后应用ado实体框架,那么推荐的数据访问层设计模式是什么?

Linq to sql 如果我稍后应用ado实体框架,那么推荐的数据访问层设计模式是什么?,linq-to-sql,design-patterns,entity-framework,data-access-layer,Linq To Sql,Design Patterns,Entity Framework,Data Access Layer,我正在创建一个网站,并使用Linq to SQl作为数据访问层,我愿意使该网站能够在Linq to SQl和ado实体框架上工作,而不改变其他层中的许多内容:业务逻辑层或UI层 实现这个目标的推荐模式是什么?你能简单解释一下怎么做吗 更新 正如下面回答的,存储库模式将对我有很大帮助 我查看了nerd晚餐网站并理解了它,但我在里面发现了以下代码: public class DinnersController : Controller { IDinnerRepository din

我正在创建一个网站,并使用Linq to SQl作为数据访问层,我愿意使该网站能够在Linq to SQl和ado实体框架上工作,而不改变其他层中的许多内容:业务逻辑层或UI层

实现这个目标的推荐模式是什么?你能简单解释一下怎么做吗

更新

正如下面回答的,存储库模式将对我有很大帮助

我查看了nerd晚餐网站并理解了它,但我在里面发现了以下代码:

public class DinnersController : Controller {

        IDinnerRepository dinnerRepository;

        //
        // Dependency Injection enabled constructors

        public DinnersController()
            : this(new DinnerRepository()) {
        }

        public DinnersController(IDinnerRepository repository) {
            dinnerRepository = repository;
        }
这意味着,据我所知,它使用IDinerRepository接口声明了一个dinnerRepository,在构造函数中,它提供了dinnerRepository,在我的例子中,它将是linq到sql的实现

我的问题是,如果我需要切换到ado.net实体框架,我需要编辑此构造函数行,或者有更好的解决方案

更新2

我应该把这个Respository接口和实现它的类放在我的解决方案中的什么位置,数据访问层还是业务层?

是一个很好的选择。如果您将其实现为一个接口;然后您可以更改具体的类,而不必更改任何其他内容

有一个很好的存储库模式示例(带有接口)

列出的代码将放入控制器中(如果您正在执行MVC应用程序);只要实现了
idinerrepository
接口,您就可以创建您想要的任何类(或者,如果您想要设计一个每个人都必须实现的、执行基本CRUD操作的接口,您可以使用类似
IRepository
的接口,然后如果您需要更多的接口,就可以实现特定的接口)(但我们不要疯了)


如果您正在“分层”应用程序,那么该部分将进入“业务逻辑”层,存储库将位于“数据访问层”。该构造函数契约将是“松散”耦合的部分。

我在“存储库”上使用了一个小的变体模式。我从优秀的书呆子晚餐教程中选的。你可以找到和

如果不是MVC的话,不要让所有的MVC都拖累你,Linq2SQL的底层封装是一个很好的封装。在最近的一次代码库更新中,我从Linq2SQL到Linkq2EF,所有的更改都在存储库中得到了很好的处理,不需要接触任何外部代码


同样值得注意的是,RIA服务也有类似的模式。你把它指向Linq2Sql或Linq2EF,它会在上面构建一个基本层,并使用CRUD。该层在源代码中,所以你可以将其删除并在非RIA项目中使用,但我只是保持原样,并在其他项目中链接到它,所以我使用e层即使我忽略了在线能力。

请检查我在问题正文中的更新,我试图解释我的上述问题。不,构造函数契约根本不会更改。更改都将在实际实现IDinerRepository的类的实现中进行,对调用该存储库的人来说是隐藏的。@soulhuntry我明白了,谢谢你的解释:)你能给我一个url让我知道更多关于RIA服务的东西和它的使用吗?Brad Abrams有一个关于RIA及其相关问题的23部分教程。当你读到这篇文章时,你会发现你可以简单地添加对他正在构建的网站的引用,并在其他项目中直接使用RIA Domainservice类。你对这个业务做了什么ITES和dto实体-是否使用映射器在这两种类型的对象之间切换?