У меня есть странный случай, когда добавление записи вызывает нежелательную загрузку связанной коллекции.
Например, у меня есть запросы и сеансы.Сессия может содержать много запросов.Я уже загрузил сеанс и просто хочу добавить новый запрос.
Однако, когда я устанавливаю вызов 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, а также отправляет и извлекает все остальные?Если так, есть ли способ предотвратить это?Как я уже сказал, мне не нужны эти запросы, мне просто нужно добавить их и двигаться дальше.