【问题标题】:Entity Framework - implementing IDbSet实体框架 - 实现 IDbSet
【发布时间】:2011-09-07 19:40:59
【问题描述】:

我想实现 IdbSet 来为我的 DbContext 提供一个自定义实现,该实现基本上用于为当前登录的用户过滤我的数据(我正在开发一个多租户应用程序)。我的总体思路与这篇文章非常相似:Can a DbContext enforce a filter policy?

但是,我不清楚如何让 DbContext “知道”如何使用我自己的实现 IDbSet 的类。我很难找到这方面的文档。任何指针都会有所帮助!

TIA, -jle

【问题讨论】:

    标签: entity entity-framework-4.1


    【解决方案1】:

    我几乎可以肯定,您无法创建自己的 IDbSet 实现并将其传递给实体框架。这样的实现将丢失与 EF 相关的所有内容,这些内容在 DbSet 本身内部实现 - 内部我的意思是没有公共 API 可以替换它。提供IDbSet 接口不是因为它应该创建您自己的集合,而是因为它允许在单元测试应用程序时模拟集合。扩展功能的唯一方法是:

    • 继承DbSet,但恐怕对您也没有帮助,因为方法/属性不会被标记为virtual
    • 创建自定义IDbSet 实现,它将包装DbSet。这看起来是最好的机会,但您仍然可以发现 DbContext 不喜欢您的新实现。我给了这个非常快速的尝试,但我没有成功。我的实现适用于持久化,但不适用于查询。

    【讨论】:

    • 谢谢拉迪斯拉夫。我误解了 DbContext 和 IDbSet 背后/当前功能的意图。我将寻找另一种在我的应用程序中实现多租户的方法。再次感谢您的帮助!
    • 您可以随时包装您的数据访问并在包装器中添加Where 条件。
    • @LadislavMrnka DbSet 的扩展方法怎么样?这是个好主意吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多