【发布时间】:2013-04-28 21:03:19
【问题描述】:
我有一个 EF 代码优先实体,并想在其上创建一个计算列。我需要首先完成所有现有的 db-loaded 值,所以我不能从属性集调用中触发它。对象是否有事件或某种方式可以知道它已完成从数据库加载所有数据,因此可以执行计算?
【问题讨论】:
标签: c# entity-framework-4 ado.net ef-code-first
我有一个 EF 代码优先实体,并想在其上创建一个计算列。我需要首先完成所有现有的 db-loaded 值,所以我不能从属性集调用中触发它。对象是否有事件或某种方式可以知道它已完成从数据库加载所有数据,因此可以执行计算?
【问题讨论】:
标签: c# entity-framework-4 ado.net ef-code-first
您应该查看 LazyLoading,它将确定何时以及如何实际检索数据。默认情况下,数据会在您第一次调用时加载。意思是如果你要做这样的事情。
var result = DB.where(x+> x.id == 1);
结果字段将在您调用它们时加载,如下所示:
var test = result.1stField; //1st field values will actually be loaded as this call is made.
但是,您可以设置它,以便在您第一次调用时立即加载所有数据,这应该会阻止执行,直到加载所有值,这将为您提供执行计算所需的时间。
【讨论】:
我认为 ObjectMaterialized 事件是您正在寻找的:
http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.objectmaterialized.aspx
【讨论】: