【问题标题】:Entity Framework Code First wrapper or repository?实体框架代码优先包装器或存储库?
【发布时间】:2011-10-04 16:43:34
【问题描述】:

我看到它有时提到存储库模式通过 DbSet 和 DbContext 对象内置到实体框架代码优先中。

然而,这留下了一些问题:

1) 注入 - 难以注入,因为没有清晰的界面

2) 模拟 - 同上

3) 对 EnitityFramework.dll 的多次引用 - 假设我在它自己的程序集/项目中创建我的 Code First,然后想在另一个地方引用它,我还必须在没有一些包装器的情况下引用 entityFramework.dll

您是否同意这一点,如果您同意,您认为最好的解决方案是什么?

【问题讨论】:

    标签: repository entity-framework-4.1 ef-code-first wrapper


    【解决方案1】:
    1. DbSet 有接口,您通常实现自己的从DbContext 派生的上下文类,因此它也可以实现您自己的接口,让您可以毫无问题地处理注入。
    2. 这是一个更复杂的问题。模拟上下文没有意义,模拟IDbSet 也没有意义,但同时模拟任何暴露IQueryable 或接受Expression<Func<>> 传递给Linq-to-entities 的存储库或包装器没有意义或者(here 是一个简单的例子)。所以是的,存储库可以处理这个问题,但是你必须付出更多的努力,而且你不会使用 Linq 从调用你的存储库的代码中查询数据库。如果您希望上层使用声明式查询(正如使用存储库时所预期的那样),您必须实现自己的规范。
    3. 恕我直言,如果您在 GAC 中没有 EntityFramework.dll,并且您将从新解决方案中引用您的第一个程序集,您仍将添加对 EntityFramework.dll 的引用以确保它与您的代码一起部署。否则你是对的。如果没有包装器,您需要一个参考。

    【讨论】:

    • 好点,在开发期间我喜欢只指出直接的依赖关系,所以这就是 EF.dll 问题困扰我的原因。
    • 异常处理和自定义异常呢。不确定在每次调用中处理数据库异常。
    猜你喜欢
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 2017-09-01
    相关资源
    最近更新 更多