将对象持久化的方式与业务逻辑分开是一种很好的模式。如果我将对象在数据库中的持久性暴露给业务逻辑,那么当我改变这些对象的持久化时,我将不得不改变业务逻辑,使它们紧密耦合。
话虽如此,假设业务逻辑使用Foo作为对象,并假设DAL(使用EF)使用FooDbModel作为持久化对象。使用存储库模式构建CRUD操作非常简单:获取Foo
对象,构建FooDbModel
,执行所需操作,然后构建Foo
并返回它。
但是当Find
功能更多涉及时。理想情况下,我想做类似的事情:
Repository.Find(f => f.Name == "something");
其中f
的类型为Foo
(不是FooDbModel
)。这可能与EF有关吗?我不想将f
传递给if FooDbModel
类型,因为这会将数据持久性暴露给BL。
这样做有诀窍吗?
答案 0 :(得分:1)
基本上,我需要做一个选择,然后做一个。
引用他:
如果您在IQueryable上执行此操作,则不会。不确定你的方法是如何构造的,但我看到的Find方法的实现类似于context.Set()。选择(m => new Foo {...})。其中(f => .. 。)应该转换为SQL。