मैंने एएसपी.नेट एमवीसी 4 और एसक्यूएल सर्वर 2008 के साथ एक वेब एप्लीकेशन विकसित किया है, मैं ContextManager क्लास को सभी पृष्ठों में केवल एक डेटाबेस संदर्भ बनाने के लिए बनाता हूं।डीबीकॉन्टेक्स्ट का निपटारा
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;
}
}
}
यह पृष्ठों के अधिकांश में ठीक से काम करता है, लेकिन पंजीकरण में पेज कुछ गलत हो जाता है और मेरे संदर्भ निम्न त्रुटि के साथ अपदस्थ हो गई: लाइन _db.Contacts.Add(contact);
पर
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);
मैं अपवाद मिला ।
लेकिन में
HotelContext _db = ContextManager.Current;
बदलकर ContextManager का उपयोग किए बिना:
HotelContext _db = new HotelContext();
समस्या हल हो गया था। लेकिन मुझे अपने स्वयं के ContextManager का उपयोग करने की जरूरत है। समस्या क्या है?
उपयोगकर्ता बनाने के बाद समस्या उत्पन्न हुई और मैंने यह सुनिश्चित करने के लिए अपने डीबी की भी जांच की, WebSecurity.CreateUserAndAccount सफलतापूर्वक आगे बढ़ रहा है लेकिन _db.Contacts.Add (संपर्क) पर; मुझे अपवाद मिला। –
@ केएन 2 के, ContextManager HttpContext.Current.Items में DbContext संग्रहीत कर रहा है, इसलिए यह प्रति अनुरोध एक नया उदाहरण होगा। – mendel