2

我将实体框架和 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 调用?

4

1 回答 1

1

您很可能需要创建自定义实体框架提供程序包装器,并在连接打开之前在包装连接中还原模拟,并在打开连接后将其放回(希望它就足够了)。如果您对数据库使用 SQL 身份验证,您将生活得更轻松。

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

于 2011-08-17T21:03:02.237 回答