2010-02-04 59 views
6

我需要运行一些自定义SQL以从表中返回对象列表。我正在使用ExecuteStoreQuery。实体框架:ObjectContext.ExecuteStoreQuery产生分离对象

var q = context.ExecuteStoreQuery<ProductionUnit>(MySelectString, new SqlParameter("@ProductionUnitId", value)); 

这不会导致包含ObjectResult集合Q,但实际ProductionUnit元素被分离和他们的EntityKey为空。当试图处理这些对象或其关系时,会产生很多问题。我的SQL查询返回一个结果集,其中包含相应ProductionUnits表的所有列(仅此而已)。

还有什么我需要做的,以便跟踪这些对象,或者是这种设计行为?

回答

3

自己解决 - 您需要使用ExecuteStoreQuery重载,它允许您为返回的实体指定EntitySet名称。

+9

请问您能否提供解决方案 – user287745 2011-02-13 09:32:47

1

由于似乎没有成为一个公认的答案,代码...

由于@neaorin说,为确保更改返回实体进行跟踪,使用方法

ExecuteStoreQuery <。 >(CommandText中,entitySetName,在MergeOptions,ARGS PARAMATERS)

如下:

string strQuery = "SELECT * FROM employees WHERE id=999"; 
List<employee> employees; 
services = context.ExecuteStoreQuery<employee>(strQuery, "employees", System.Data.Objects.MergeOption.AppendOnly).ToList(); 

如果其中一些返回的实体已经在上下文中浮动,即是覆盖它们还是使用现有对象(默认设置),MergeOptions参数将指示框架执行的操作。