实体框架和模拟
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 身份验证,您将生活得更轻松。
恢复数据访问的模拟看起来是个很奇怪的解决方案。我想知道在该应用程序中模拟的意义何在?
【讨论】:
以上是关于实体框架和模拟的主要内容,如果未能解决你的问题,请参考以下文章