Ситуация: объект в сеансе из прошлого контекста не может быть установлен как родитель другого объекта, так как другой объект находится в новом контексте.
Скажем, у меня есть пользователь в сеансе, который я извлек из контекста. Теперь страница перезагружается, этот контекст удален, и создается новый контекст.
someUser = context.First(user => user.id == id);
Session["SomeUser"] = someUser
...
context.Dispose();
Страница Перезагрузить
userAddress = new UserAddress();
userAddress.User = (User)Session["SomeUser"]; //BOOM NOT IN SAME CONTEXT
Я хотел бы сделать следующее:
if(!context.SomeUsers.Contains((User)Session["SomeUSer"]) //Only check context NOT DATABASE
{
//Reload from database
//Set user in session to new object
}
Идея состоит в том, что если объект в сеансе не принадлежит текущему контексту, перезагрузите его из базы данных, чтобы он теперь "принадлежал" тому же контексту, что и любой другой объект в текущем контексте. (Я использую контекст для запроса)
UPDATE
Так что я делал это временно, пока не смогу лучше понять, как это исправить:
Int32 sessionUser = sessionUser .UserID;
var userCheck = EntityContext.Context.ChatUsers.First(item => item.UserID == returnValueID);
if (userCheck != sessionUser)
{
sessionUser = userCheck;
}
Идея состоит в том, чтобы увидеть, является ли объект в сеансе (sessionUser) таким же, как объект "в" контексте. Теперь, если работает просто отлично. При первом создании контекста СЛЕДУЕТ попасть в базу данных и захватить пользователя. После сравнения становится очевидным, что они не совпадают, и теперь sesionUser является пользователем в контексте. В следующий раз, если флажок установлен, sessionUser и userToCheck совпадают.
Проблема до сих пор:
var userCheck = EntityContext.Context.ChatUsers.First(item => item.UserID == returnValueID);
ВСЕГДА попадает в базу данных. Это не хорошее решение.
Подробнее
Мех, это может быть ответом в конце концов. Я забыл это правило:
x является свойством типа ObjectQuery.
Когда вы выполняете ObjectQuery, он
всегда попадет в бэк-магазин.
Вот что они делают. Если ты не хочешь
выполнить запрос к базе данных, затем
не используйте ObjectQuery.