为什么对ObjectSet <t> .AddObject()的调用会获得T类型的所有实体?</t>

时间:2011-11-24 14:40:25

标签: c# entity-framework

var he = new LogHistoryEntry
             {
                 ActionId = action.Id,
                 ObjectId = logObject.Id,
                 UserId = user.Id,
                 Info = msg,
                 Item = s.Id,
                 Date = DateTime.Now
             };

ctx.LogHistoryEntries.AddObject(he);

我只想添加一个日志条目。我不希望EF读取已经存在于db中的所有条目。 我怎么能避免这个?

UPDATE1:

好吧,我不会称之为解决方案,但这种方法有效。

public static void LogChanges(ObjectContext context, string msg, int itemId, int userId, int logActionId, int logObjectId)
{
    context.ExecuteStoreCommand(
                "insert into log_history (object_id,action_id,item,info,user_id,date) values ({0},{1},{2},{3},{4},GETDATE())",
                logObjectId, logActionId, itemId, msg, userId);
}

然而,我不喜欢这个,因为从层分离的角度来看它是一个黑客。 在这里,我要了解存储列名称。那不行。

UPDATE2:

这是在AddObject调用时的sql-profiler:

  

exec sp_executesql N'SELECT [Extent1]。[id] AS [id],   [Extent1]。[object_id] AS [object_id],[Extent1]。[action_id] AS   [action_id],[Extent1]。[item] AS [item],[Extent1]。[info] AS [info],   [Extent1]。[date] AS [date],[Extent1]。[user_id] AS [user_id] FROM   [dbo]。[log_history] ​​AS [Extent1] WHERE [Extent1]。[user_id] =   @ EntityKeyValue1',N'@ EntityKeyValue1 int',@ EntityKeyValue1 = 4

当然,它不是要求所有的log entreis,而是为什么它检查给定的用户ID对我来说是一个谜。

1 个答案:

答案 0 :(得分:0)

Hvd是对的。 db往返的原因是使用fixups生成POCO并启用延迟加载。