我正在使用Entity Framework 4.1和ASP.Net MVC 3开发应用程序。MVC提供了表示层,中间库提供业务逻辑,而Entity Framework则充当数据层。
我可以将Entity Framework代码分离成一组存储库类或一个合适的变体,无论哪种方式都构成了一个有价值的数据层,但我遇到了解决设计问题的困难。
如果多层方法存在以帮助我保持关注点分离,那么我的数据持久性选择也不应该是表示层的关注点。问题在于,通过使用Entity Framework,我基本上将应用程序与跟踪实体更改并自动持久化的概念紧密耦合起来。
因此,在假设的世界中,如果我找到了不使用Entity Framework并希望进行交换的原因,一个设计良好的解决方案应该允许我在适当的层进行这样的更改,而不会影响其他相关的层。但是,由于所有代码都是根据数据层跟踪对象更改的知识编写的,因此我只能将Entity Framework替换为以类似方式工作的东西,例如nHibernate。
我如何使用Entity Framework而不需要编写假定数据层正在跟踪实体更改的代码?
对于仍然关心自己情况的人的更新:
Ayende Rahien撰写了一篇精彩的文章,打破了整个论点: http://ayende.com/blog/4567/the-false-myth-of-encapsulating-data-access-in-the-dal
我可以将Entity Framework代码分离成一组存储库类或一个合适的变体,无论哪种方式都构成了一个有价值的数据层,但我遇到了解决设计问题的困难。
如果多层方法存在以帮助我保持关注点分离,那么我的数据持久性选择也不应该是表示层的关注点。问题在于,通过使用Entity Framework,我基本上将应用程序与跟踪实体更改并自动持久化的概念紧密耦合起来。
因此,在假设的世界中,如果我找到了不使用Entity Framework并希望进行交换的原因,一个设计良好的解决方案应该允许我在适当的层进行这样的更改,而不会影响其他相关的层。但是,由于所有代码都是根据数据层跟踪对象更改的知识编写的,因此我只能将Entity Framework替换为以类似方式工作的东西,例如nHibernate。
我如何使用Entity Framework而不需要编写假定数据层正在跟踪实体更改的代码?
对于仍然关心自己情况的人的更新:
Ayende Rahien撰写了一篇精彩的文章,打破了整个论点: http://ayende.com/blog/4567/the-false-myth-of-encapsulating-data-access-in-the-dal