У меня есть странный случай, когда добавление записи вызывает нежелательную загрузку связанной коллекции.
Например, у меня есть запросы и сеансы. Сессия может содержать много запросов. Я уже загрузил сеанс и просто хочу добавить новый запрос.
Однако, когда я устанавливаю call AddObject в ObjectSet репозитория Request, SQL Profiler показывает, что запрос выбора выполняется для всех связанных запросов в этом сеансе.
Вот код проблемы:
this._request = new Request
{
Action = (string)filterContext.RouteData.Values["action"],
Controller = filterContext.Controller.GetType().Name,
DateAdded = userContext.Session.DateLastActive,
IpAddress = filterContext.HttpContext.Request.UserHostAddress,
SessionId = userContext.Session.Id
};
loggingService.AddRequest(this._request);
Эта последняя строка просто вызывает мою службу, которая, в свою очередь, просто вызывает _objectSet. AddObject (entity)
.
То же самое произойдет, если я попытаюсь установить новый запрос Session = userContext.Session
(вместо SessionId = userContext.Session.Id
) - запрос будет выполняться при установке этого свойства, а не AddObject. Похоже, что EF4 считает, что ему нужна связанная коллекция запросов в сеансе, когда на нее по какой-то причине ссылаются.
Но мне не нужны связанные запросы в сеансе, и они не используются или не упоминаются. Так что я не уверен, зачем их загружает EF4. Я прошел через код и убедился, что это происходит именно в строке AddObject (entity)
(Profiler показывает, что запрос выполняется в том же экземпляре).
Почему это произошло и как я могу остановить это?
Заранее спасибо.
РЕДАКТИРОВАТЬ: Это потому, что EF4 пытается добавить новый запрос в связанную коллекцию Session.Requests, а также получает и извлекает все остальные? Если да, то есть ли способ предотвратить это? Как я уже сказал, мне не нужны эти запросы, мне просто нужно добавить их и двигаться дальше.