সংক্ষেপে ব্যতিক্রমটি পোষ্টিংয়ের মোড়ক মডেল চলাকালীন এবং একটি এন্ট্রির স্থিতিকে পরিবর্তিত অবস্থায় পরিবর্তিত করা হয়। রাষ্ট্র পরিবর্তন করার আগে, রাষ্ট্রটি 'বিচ্ছিন্ন' তে সেট করা আছে তবে সংযুক্তি () কল করা একই ত্রুটি ছুঁড়ে দেয়। আমি EF6 ব্যবহার করছি।
দয়া করে নীচে আমার কোডটি সন্ধান করুন (মডেল নামগুলি এটি পড়া সহজ করার জন্য পরিবর্তন করা হয়েছে)
মডেল
// Wrapper classes
public class AViewModel
{
public A a { get; set; }
public List<B> b { get; set; }
public C c { get; set; }
}
নিয়ামক
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
if (!canUserAccessA(id.Value))
return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
var aViewModel = new AViewModel();
aViewModel.A = db.As.Find(id);
if (aViewModel.Receipt == null)
{
return HttpNotFound();
}
aViewModel.b = db.Bs.Where(x => x.aID == id.Value).ToList();
aViewModel.Vendor = db.Cs.Where(x => x.cID == aViewModel.a.cID).FirstOrDefault();
return View(aViewModel);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(AViewModel aViewModel)
{
if (!canUserAccessA(aViewModel.a.aID) || aViewModel.a.UserID != WebSecurity.GetUserId(User.Identity.Name))
return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
if (ModelState.IsValid)
{
db.Entry(aViewModel.a).State = EntityState.Modified; //THIS IS WHERE THE ERROR IS BEING THROWN
db.SaveChanges();
return RedirectToAction("Index");
}
return View(aViewModel);
}
উপরের লাইনে দেখানো হয়েছে
db.Entry(aViewModel.a).State = EntityState.Modified;
ব্যতিক্রম নিক্ষেপ:
'A' প্রকারের একটি সত্তা সংযুক্তি ব্যর্থ হয়েছে কারণ একই ধরণের অন্য সত্তার ইতিমধ্যে একই প্রাথমিক কী মান রয়েছে। 'সংযুক্তি' পদ্ধতিটি ব্যবহার করার সময় বা গ্রাফের কোনও সত্তার বিরোধী মূল্যের মান থাকলে কোনও সত্তার স্থিতিকে 'অপরিবর্তিত' বা 'পরিবর্তিত' এ সেট করার সময় এটি ঘটতে পারে। এটি হতে পারে কারণ কিছু সত্তা নতুন এবং এখনও ডাটাবেস-উত্পন্ন মূল মানগুলি পায় নি। এই ক্ষেত্রে গ্রাফটি ট্র্যাক করতে 'অ্যাড' পদ্ধতি বা 'যুক্ত' সত্তার স্থিতিটি ব্যবহার করুন এবং তারপরে নন-নতুন সত্তার স্থিতিকে যথাযথ হিসাবে 'অপরিবর্তিত' বা 'পরিবর্তিত' হিসাবে সেট করুন।
কেউ কি আমার কোডটিতে কিছু ভুল দেখেছে বা বুঝতে পারে যে কোন পরিস্থিতিতে কোনও মডেল সম্পাদনার সময় এ জাতীয় ত্রুটি ছুঁড়ে ফেলবে?
db
উদাহরণস্বরূপ আপনার দুটি কর্মের মধ্যে একই, হিসাবে এটি আপনার আইটেমের GET পদ্ধতি (পরে প্রসঙ্গ দ্বারা ট্র্যাক) দ্বারা লোড হয়, আপনার সমস্যা ব্যাখ্যা করতে পারেন, এবং এটি আপনার পোস্ট পদ্ধতিতে শনাক্ত করতে পারছি পারে সত্তা আগে সংগৃহীত ।
canUserAccessA()
সরাসরি বা অন্য entitiy একটি সম্পর্ক যেমন সত্তা লোড?
EntityState
? যেহেতু আপনার সত্তা কোনও পোস্টের অনুরোধ থেকে আসে, এটি বর্তমান প্রসঙ্গে ট্র্যাক করা উচিত নয়, আমি অনুমান করি যে এটি একটি বিদ্যমান আইডির সাহায্যে আপনি কোনও আইটেম যুক্ত করার চেষ্টা করেছেন বলে বিবেচনা করে