1

我正在尝试使用SecurEntity为我的应用程序中的某些表实现列加密。

我正在使用依赖注入将 DbContext 的单个实例注入到我的所有存储库中。

DbContext 类有一个附加到 SaveChanges 事件处理程序的事件,如果正在保存的更改保存在应加密的对象上,则该事件处理程序调用 SecurEntity Encrpyt 方法。

还有一个附加到 ObjectMaterialized 事件处理程序的事件,该事件处理程序在最初从数据库中检索加密对象时解密它们。

当我在登录期间调试应用程序时,用户对象(这是应该加密的表之一),用户对象从数据库中检索并成功解密。然后它具有一些属性,例如更新的上次登录日期,这些更改被保存,然后成功加密。

我的问题是,稍后在登录过程中,再次检索了 User 对象,但它没有触发 ObjectMaterialized 事件,因此它没有被解密。

我认为这是因为由于依赖注入而使用了单个 DbContext,并且实体框架已经有一个正在跟踪的实例。

有谁知道我该如何解决这个问题?我正在开发一个将托管在 Azure 上的应用程序,因此透明数据加密不是我的选择,我需要实现某种形式的加密。

4

1 回答 1

0

Web 应用程序不应保留 DbContext 的实例。DbContext 应该在请求期间生存和死亡(也就是在请求完成后立即处置)。检查您的依赖注入是如何配置的,在任何情况下都不应将其配置为使用 DbContext 作为单例(整个应用程序的单个实例)。

于 2013-09-19T14:15:42.587 回答