在技术堆栈中,我有一个SQL数据库,它首先在Entity Framework v6.1.3中用作数据库,以将其公开给.Net应用程序的其余部分。
我试图在将实体返回到应用程序的更高层之前操纵该实体,以便屏蔽/加扰某些属性中的数据。在数据库中执行相同的操作不是一种选择。
应用程序的体系结构促使我朝着尝试在尽可能低的层实现它的方向发展。
我的最低层是实体框架中的某个地方。我尝试用简单的方法来改变生成的类中的getter。
private string _columnX;
public string ColumnX {
get {
if (x) { return "*"; }
return _columnX;
}
set { _columnX = value; }
这适用于简单查询。但是,一旦查询变得有点复杂并且我通过导航属性访问此实体,EF似乎避免使用此代码并依赖于一些内部生成的魔法。
我在IDbCommandInterceptor上找到了一些信息,但我不确定我是否可以将它用于我的场景以及如何使用它来操作返回的实体。 Can I access the entity in IDbCommandInterceptor in Entity Framework
问题是:EF和我的数据库之间是否存在某种中间层,或者EF中的某些配置是否可以在查询此数据的每种情况下操纵实体中的数据?
更新
我使用了ObjectMaterialized
建议的方法。
答案/评论问题中提到的预测仍然存在。正如在另一个问题中讨论的那样,如果使用预测,这种方法是行不通的。
有没有办法强制检查投影,以便可以操纵给定列中的数据?