能否在IMaterializationInterceptor中访问已执行查询的阴影属性?
关于IMaterializationInterceptor访问阴影属性的问题
问题原因
在InitializedInstance阶段,EF Core尚未将阴影属性的值填充到实体条目中,此时CurrentValues无法获取到阴影属性的实际值。尽管查询语句包含了阴影属性,但实体实例刚完成初始化,属性值的填充操作是在这个拦截器方法执行之后才进行的。
解决方法
改用MaterializedInstance方法,该阶段EF Core已完成所有属性(包括阴影属性)的赋值,能够正常获取到阴影属性的值:
public class MyInterceptor : IMaterializationInterceptor { public object MaterializedInstance(MaterializationInterceptionData materializationData, object instance) { var entry = materializationData.Context.Entry(instance); entry.CurrentValues["SomeOtherProperty"] = entry.CurrentValues["MyShadowProperty"]; return instance; } }
补充说明
InitializedInstance:实体实例刚创建完成(如通过构造函数初始化),但EF还未开始填充任何属性值,包括阴影属性。MaterializedInstance:实体所有属性(含阴影属性)均已完成赋值,是处理属性值的正确时机。
内容的提问来源于stack exchange,提问作者user2900970
相关产品推荐
相关产品推荐

