所以,我在使用这个Repository模式时遇到了困难。在很多文章,帖子等中,我读到存储库应该只返回数据库对象(没有DTO,存储库中没有映射器)。因此,您返回单个数据库对象或对象列表。
这没关系,但是对于EF(实体框架)性能原因,只返回您需要的字段,而不是整个实体。
那么,你应该如何使用存储库模式呢?您无法选择具有特定字段的数据库对象,因为它已分离
(ctx.Users.Select(new User(){ properties }).FirstOrDefault()
)
,你不能返回一个匿名对象,并且当我读到它时,返回IQueryable<User>
并在存储库外部选择所需的字段是不好的做法。
你能分享一些练习吗?
答案 0 :(得分:3)
我们用2种类型的通用函数解决了它。你可以使用
Select
方法签名的样子)在这两种情况下,存储库都不再返回实体,但它也不负责对象的转换,而是Automapper库或具有select表达式的调用者正在小心处理那个。