我正在合并实体框架和ASP。. NET动态数据到现有的应用程序中,该应用程序在web中设置为使用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到EF查询,手动调用,框架的幕后调用等),在局部类中哪里是适当的地方,以便为每个调用对reverttoappool和UndoImpersonation进行适当的调用?
您很可能需要创建自定义实体框架提供程序包装器,并在连接打开之前在包装的连接中恢复模拟,并在连接打开后将其放回(希望这就足够了)。如果您使用SQL身份验证来代替数据库,您将更容易生活。
为数据访问而返回的模拟看起来是非常奇怪的解决方案。我想知道在这个应用程序中进行模拟有什么意义?