实体框架中的存储库模式和查找功能

时间:2017-01-17 15:14:56

标签: c# entity-framework repository-pattern

将对象持久化的方式与业务逻辑分开是一种很好的模式。如果我将对象在数据库中的持久性暴露给业务逻辑,那么当我改变这些对象的持久化时,我将不得不改变业务逻辑,使它们紧密耦合。

话虽如此,假设业务逻辑使用Foo作为对象,并假设DAL(使用EF)使用FooDbModel作为持久化对象。使用存储库模式构建CRUD操作非常简单:获取Foo对象,构建FooDbModel,执行所需操作,然后构建Foo并返回它。

但是当Find功能更多涉及时。理想情况下,我想做类似的事情:

Repository.Find(f => f.Name == "something");

其中f的类型为Foo(不是FooDbModel)。这可能与EF有关吗?我不想将f传递给if FooDbModel类型,因为这会将数据持久性暴露给BL。

这样做有诀窍吗?

1 个答案:

答案 0 :(得分:1)

@IvanStoev解决了这个问题。

基本上,我需要做一个选择,然后做一个。

引用他:

  

如果您在IQueryable上执行此操作,则不会。不确定你的方法是如何构造的,但我看到的Find方法的实现类似于context.Set()。选择(m => new Foo {...})。其中(f => .. 。)应该转换为SQL。