Почему вызов ObjectSet <T>.AddObject () получает все сущности типа T? - PullRequest
3 голосов
/ 24 ноября 2011
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 прочитал все записи, уже сохраненные в БД.Как я могу избежать этого?

ОБНОВЛЕНИЕ1:

Ну, я бы не назвал это решением, но этот подход работает.

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:

Это то, что sql-profiler возвращает при вызове AddObject:

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

Конечно, он запрашивает не все записи журнала, но почему он проверяет заданный идентификатор пользователя, для меня загадка.

1 Ответ

0 голосов
/ 12 декабря 2011

Хвд прав.Причиной обходов БД являются сгенерированные POCO с исправлениями и включенной отложенной загрузкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...