Tôi đã phát triển một ứng dụng web với ASP.NET MVC 4 và SQL Server 2008, tôi tạo ra lớp ContextManager chỉ có một bối cảnh cơ sở dữ liệu trong tất cả các trang.DbContext đã được xử lý
public static class ContextManager
{
public static HotelContext Current
{
get
{
var key = "Hotel_" + HttpContext.Current.GetHashCode().ToString("x")
+ Thread.CurrentContext.ContextID.ToString();
var context = HttpContext.Current.Items[key] as HotelContext;
if (context == null)
{
context = new HotelContext();
HttpContext.Current.Items[key] = context;
}
return context;
}
}
}
Nó hoạt động đúng trong hầu hết các trang, nhưng trong đăng ký trang họ gặp khó khăn và bối cảnh của tôi đi lật đổ với lỗi sau:
The operation cannot be completed because the DbContext has been disposed.
public ActionResult Register (RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password,
new
{
Email = model.Email,
IsActive = true,
Contact_Id = Contact.Unknown.Id
});
//Add Contact for this User.
var contact = new Contact { Firstname = model.FirstName, LastName = model.Lastname };
_db.Contacts.Add(contact);
var user = _db.Users.First(u => u.Username == model.UserName);
user.Contact = contact;
_db.SaveChanges();
WebSecurity.Login(model.UserName, model.Password);
tại dòng _db.Contacts.Add(contact);
tôi có ngoại lệ .
Nhưng mà không sử dụng ContextManager bằng cách thay đổi
HotelContext _db = ContextManager.Current;
thành:
HotelContext _db = new HotelContext();
vấn đề đã được giải quyết. Nhưng tôi cần phải sử dụng ContextManager của riêng mình. Vấn đề là gì?
sự cố xảy ra sau khi tạo người dùng và tôi cũng đã kiểm tra db của mình để chắc chắn, WebSecurity.CreateUserAndAccount đang tiến hành thành công nhưng tại _db.Contacts.Add (liên hệ); tôi có ngoại lệ. –
@ ken2k, ContextManager đang lưu trữ DbContext trong HttpContext.Current.Items, vì vậy nó sẽ là một cá thể mới theo yêu cầu. – mendel