开发者

Entity Framework: ObjectContext.ExecuteStoreQuery produces detached objects

I need to run some custom SQL to return a list of objects from a table. I'm using ExecuteStoreQuery for that.

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

This does result in q containing an ObjectResult collection, but the actual ProductionUnit elements are Detached and their EntityKey is null. This creates a number of issues when trying to work on some of these objects or their relationships. My SQL query returns a result set containing all the columns of the respective ProductionUnits table (and nothing more).

Anyt开发者_如何转开发hing else I need to do in order to have these objects tracked or is this behavior by design?


Solved it myself - you need to use the ExecuteStoreQuery overload which allows you to specify the EntitySet name for your returned entities.


As there doesn't seem to be an accepted answer with code...

As @neaorin says, to ensure changes to returned entities are tracked, use the method

ExecuteStoreQuery<..>(commandText, entitySetName, MergeOptions, args paramaters)

as follows:

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

The MergeOptions parameter dictates what the Framework does if some of these returned entities are already floating around in the context, i.e. whether to overwrite them or use the existing objects (the default).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜