实体框架和模拟

Posted

技术标签:

【中文标题】实体框架和模拟【英文标题】:Entity Framework and impersonation 【发布时间】:2011-08-17 20:32:58 【问题描述】:

我将实体框架和 ASP.NET 动态数据合并到一个现有应用程序中,该应用程序设置为在 web.config 中使用 impersonation="true",但是之前的开发人员选择了一种方法,即他们恢复到应用程序池他们进行的每个 DAL 调用的身份

private WindowsImpersonationContext context = null;

public void RevertToAppPool()

    if (!WindowsIdentity.GetCurrent().IsSystem)
    
        context = WindowsIdentity.Impersonate(System.IntPtr.Zero);
    


public void UndoImpersonation()

    if (context != null)
    
        context.Undo();
    

我被要求在使用实体框架时保留这种行为......鉴于实体对象在所有地方都被使用(在 LINQ to EF 查询、手动调用、框架的幕后调用等中) .),部分类中的适当位置可以在每次调用时对 RevertToAppPool 和 UndoImpersonation 进行适当的调用?

【问题讨论】:

在上下文类的 OnContextCreated 中调用 RevertToAppPool 并重写 Dispose 以调用 UndoImpersonation 是否是合适的解决方案?我无法从我所在的地方对此进行测试。 【参考方案1】:

您很可能需要创建自定义Entity framework provider wrapper 并在连接打开之前在包装连接中恢复模拟,并在连接打开后将其放回(希望它就足够了)。如果您对数据库使用 SQL 身份验证,您将生活得更轻松。

恢复数据访问的模拟看起来是个很奇怪的解决方案。我想知道在该应用程序中模拟的意义何在?

【讨论】:

以上是关于实体框架和模拟的主要内容,如果未能解决你的问题,请参考以下文章

如何最小起订量实体框架 SqlQuery 调用

试图模拟 IQueryable 实体框架查询

摔跤模拟器实体框架/数据库设计

使用Moq模拟实体框架6 ObjectResult

带有内存测试双倍的模拟实体框架

实体框架事务和死锁