EF中的ObjectMaterialize不会在第一级查询中触发

Arc*_*ian 2 c# linq entity-framework objectcontext

我有一个查询,例如:

Query Syntax 1 - Does not fire the somehandler;
var results = (from I in db.mytable
              select new myObject() {
                        column1 = i.Prop1
              }).ToList();

Query Syntax 2 - Does fires the somehandler event;
var results = (from I in db.mytable
               select I).toList();
Run Code Online (Sandbox Code Playgroud)

在我的ContextClass中,我有这样的事情:

((IOjectContextAdapter)this).ObjectContext.ObjectMaterialized +=  somehandler;
Run Code Online (Sandbox Code Playgroud)

我看到的唯一区别是第一个查询从选择结果中构建一个新对象.

知道为什么活动不会开火吗?

Pra*_*ose 8

该事件仅针对Entity对象投影触发,这就是您看到此行为的原因.

"如果查询使用了投影并且没有匹配的实体,则结果将实现为DbDataRecords(或使用LINQ to Entities查询时的匿名类型)而不是实体对象,"Ref -Programming Entity Framework(Julia Lerman)P- 244)

ObjectMarialized状态的定义

在作为查询或加载操作的一部分从数据源中的数据创建实体对象时发生.

参考.https://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.objectmaterialized(v=vs.110).aspx

由于投影不会创建Entity对象,因此它不会触发事件.