繁体   English   中英

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

[英]Repository Pattern and Find Functionality in Entity Framework

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

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

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

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

其中fFoo类型(不是FooDbModel )。 EF可以吗? 我不想传递f where if 是FooDbModel类型,因为这FooDbModel数据持久性暴露给 BL。

有什么技巧可以做到这一点吗?

@IvanStoev 解决了这个问题。

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

引用他的话:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM