【问题标题】:Entity Framework 4 Unit of Work / Repository WITHOUT .Query() Lambda没有 .Query() Lambda 的实体框架 4 工作单元/存储库
【发布时间】:2023-03-31 08:58:01
【问题描述】:

我们已经看到了一些非常有用的方法来实现 EF4 存储库和工作单元模式(Reference 1Reference 2

我看到的所有示例都使用需要使用 LINQ 表达式语法的方法,例如:

IEnumerable<T> Query(Expression<Func<T, bool>> filter) 

var employees = employeeRepository.Query(emp => emp.Username == userName); 

但我想使用 LINQ 查询表达式语法,例如:

from emp in context.Employees select emp where emp.Username == userName;

有没有办法在我的存储库方法中使用 LINQ 查询表达式语法的同时享受存储库和 UoW 的好处?

理查德

【问题讨论】:

    标签: linq entity-framework entity-framework-4 linq-to-entities linq-to-objects


    【解决方案1】:

    是的,但你必须公开IQueryable&lt;T&gt;

    IQueryable<T> Query();
    

    之后你可以使用如下代码:

    var query = from emp in EmployeeRepository.Query() 
                where emp.Username == userName
                select emp;
    

    昨天讨论了difference between approaches。还多次讨论了存储库和工作单元的整个概念 - 包括 why to use them and what problems you can expect

    【讨论】:

    • +1 我也是这样做的。它仍然启用 lambda 表达式,例如 employeeRepository.Query().Where(emp => emp.UserName == userName);
    • 看起来不错。我知道存储库讨论已经完成。关于这个主题的有趣的 2 次讨论几乎同时出现 :) 我认为围绕这​​些主题进行了如此多的讨论这一事实有助于突出 EF4 中一些非常严重的弱点。
    猜你喜欢
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多