상황 : 다른 개체가 새로운 컨텍스트에 있으므로 이전 컨텍스트의 세션에있는 개체를 다른 개체의 부모로 설정할 수 없습니다.Entity Framework : 컨텍스트에 개체가 있는지 확인하는 방법이 있습니까?
내가 컨텍스트에서 검색 한 세션의 사용자가 있다고 가정 해보십시오. 이제 페이지가 다시로드되고 해당 컨텍스트가 닫히고 새로운 컨텍스트가 만들어집니다.
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
}
아이디어는 세션에서 개체가 현재 컨텍스트에 속하지 않는 경우, 다시로드이다 현재 컨텍스트의 다른 모든 개체와 동일한 컨텍스트에서 "소유"하게됩니다.
이Int32 sessionUser = sessionUser .UserID;
var userCheck = EntityContext.Context.ChatUsers.First(item => item.UserID == returnValueID);
if (userCheck != sessionUser)
{
sessionUser = userCheck;
}
아이디어는 보는 것입니다 : 나는이 문제를 해결하는 방법의 더 나은 아이디어를 얻을 수있을 때까지
그래서 나는 일시적으로 이런 짓을
UPDATE (I는 요청에 따라 컨텍스트를 사용하고 있습니다) 세션의 객체 (sessionUser)가 컨텍스트의 "in"객체와 같은 경우 이제 if는 잘 작동합니다. 컨텍스트가 처음 만들어지면 데이터베이스에 충돌하여 사용자를 붙잡아 야합니다. 비교해 보면, 그들은 동일하지 않으며 sesionUser는 이제 컨텍스트에서 사용자임을 분명합니다. 다음에이 옵션을 선택하면 sessionUser와 userToCheck가 동일합니다.
var userCheck = EntityContext.Context.ChatUsers.First(item => item.UserID == returnValueID);
항상 데이터베이스를 명중 :
문제는 여전히입니다. 이것은 좋은 해결책이 아닙니다.
시큰둥 더 많은 업데이트이 결국 답을 할 수있다. 이 규칙을 잊어 버렸습니다.
x는 ObjectQuery 유형의 속성입니다. ObjectQuery를 실행하면 이 항상 보조 저장소를 공격합니다. 그게 그들이하는 일입니다. 에서 데이터베이스 쿼리를 실행하지 않으려면 은 ObjectQuery를 사용하지 마십시오.
어쩌면 요점을 얻지 못했습니다. 세션 데이터의 사용자는 데이터베이스에서로드 할 때까지 새로 만든 개체 컨텍스트에있을 수 없습니다. 사용자가 새로운 객체 컨텍스트에 있어야한다고 생각할 때 명확히 할 수 있습니까? –
생성 된 컨텍스트는 요청 당이므로 컨텍스트와 세션의 컨텍스트가 동일 할 수 있습니다. 컨텍스트가 요청 시작시 만들어 질 때가 아닙니다. 어느 것이 그들이 동일하고, 그렇지 않다면 데이터베이스에서 그것을 얻을 수 있는지 확인하고 싶습니다. –