내 LINQ to SQL 데이터 컨텍스트 (또는 테스트 용 가짜 컨텍스트)를 보유하는 DataContext라는 BaseController의 속성이 있습니다. (ASP.NET MVC에 대한 요청이 즉,) 매개 변수없는 생성자를 사용하는 경우 SQL 데이터 컨텍스트 내 LINQ의 새로운 인스턴스가 속성에 할당됩니다 :왜 내 DataContext는 하나의 작업에서만 null입니까?
내 BaseController에서 또한public class BaseController : Controller {
public IDataContextWrapper DataContext { get; set; }
public BaseController() : this(new DataContextWrapper<MyDataContext>()) { }
public BaseController(IDataContextWrapper context) {
DataContext = context;
}
}
, 일부 글로벌 ViewData 항목을 설정했습니다.
protected override void OnActionExecuting(ActionExecutingContext filterContext) {
ViewData["Example"] = DataContext.Table<Example>().Count();
base.OnActionExecuting(filterContext);
}
거의 모든 작업에서 정상적으로 작동합니다. 이 BaseController.OnActionExecuting 동안 NullReferenceException이 제기
public ActionResult Logout() {
FormsAuth.SignOut();
return RedirectToResult("Login");
}
: 작동하지 않는 유일한 사람이 내 AccountController의 로그 아웃 작업입니다. 특정 작업을 실행할 때 DataContext 속성은 null입니다.
왜 한 번의 작업에서만 발생합니까?
참고 : IDataContextWrapper 및 DataContextWrapper는 단위 테스트에서 가짜 컨텍스트로 바꿀 수 있도록 LINQ의 기존 기능을 SQL DataContext 개체로 간단하게 래핑합니다. 그것은 독자적으로 처분하지 않지만, 기본 DataContext까지 남겨 둡니다, 그래서 저는 그것이 문제가 아니라는 것을 확신합니다.
확인하기 만하면 DataContext를 재사용하거나 지속하지 않습니다. DataContext는 작업 단위 내에서 작성되고 만료되어야합니다. 나는 이것을 잘못했을 때 이상한 행동으로 엉덩이를 무겁게 가볍게 잡았다. – Serapth
한 번만 (컨트롤러가 생성 될 때) 할당 된 전체 컨트롤러에 대해 하나의 DataContext 인스턴스가 있습니다. OnActionExecuting과 액션 메서드 자체에서 여러 번 성공적으로 액세스 할 수 있지만 Logout 메서드의 경우 DataContext는 OnActionExecuting에서 한 번만 사용됩니다. –
좋아, 이건 나쁘지 않아서 그게 너의 문제의 원인이라면 나에게 충격을주지 않을거야. 데이터 컨텍스트는 지속되지 않아야합니다. 필자의 경우, 문제는 서로 다른 사용자가 서로의 데이터를 보는 것처럼 보였습니다 (실제로 ... 쇼 스토퍼가 조금씩). 나는 이것이 당신의 문제인지 말할 수는 없지만, 나는 당신에게 약속 할 수있다. 그것은 문제가있다. – Serapth