使用Entity Framework Model First加密密码字段

Ovi*_*lia 4 sql-server entity-framework visual-studio-2010 ef-model-first

我在VS2010的项目中使用Entity Framework Model First.

我想知道是否有办法password.edmx窗口或属性窗口中设置要加密的字段.我不想更改生成的.cs文件,因为每次修改模型时都会覆盖它.

Lad*_*nka 5

EF没有任何内置的加密支持,它也不支持数据库加密机制(除非您在SQL Server中使用透明加密,它将加密整个数据库).

作为一种解决方法,您可以在应用程序中进行集中加密和解密.这是高层次的想法:

  • string为加密数据使用属性 - 此属性将nvarchar在目标数据库中表示为列
  • 覆盖SaveChanges在你的方法ObjectContextDbContext继承的局部类(或处理SavingChanges事件ObjectContext继承类).在此方法/处理程序中搜索处于AddedModified处于状态(使用ObjectStateManagerDbChangeTracker)的实体的所有实例,从属性中获取应加密的值,对其进行加密并将加密值以Base64格式存储回属性.如果在为所有实例加密属性后进行SaveChanges覆盖调用base.SaveChanges.
  • 拉手ObjectMaterialized甚至在ObjectContext继承类(在你的DbContext将不得不使用IObjectContextAdapter来获得ObjectContext从您的实例DbContext的实例),从财产采取加密值,它从Base64编码格式转换为字节数组,解密,并将其存放回财产.这可能会导致一些其他复杂情况,因为更改属性值可能会导致修改状态,但您也应该能够修复它.