उम्मीद है कि एक बहुत ही सरल सवाल है। लेकिन मैं एक MVC अनुप्रयोग के साथ कोड का उपयोग कर पहली हूं और मुझे एक श्रेणी और ServiceType वस्तु कई रिश्ते के लिए कई है कि है:इकाई फ्रेमवर्क 4 मेरी कई से कई पंक्तियों को सहेज नहीं रहा
public class Category
{
public Category()
{
ServiceTypes = new HashSet<ServiceType>();
}
public Guid CategoryId { get; set; }
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
public virtual ICollection<ServiceType> ServiceTypes { get; set; }
}
डेटाबेस सही ढंग से तैयार की गई है और CategoryServiceTypes नामक एक जोड़ने तालिका में शामिल है। मेरा मुद्दा यह है कि मैं अपने सेवा प्रकार संग्रह में आइटम जोड़ता हूं और कॉल सहेजता हूं और हालांकि कोई त्रुटि नहीं होती है, श्रेणी सेवा प्रकार में कोई पंक्तियां नहीं जोड़े जाती हैं। मुझे आशा है कि मैं कुछ स्पष्ट रूप से गलत यहाँ कर रहा हूँ
[HttpPost]
public ActionResult Edit(Category category, Guid[] serviceTypeIds)
{
if (ModelState.IsValid)
{
// Clear existing ServiceTypes
category.ServiceTypes.Clear();
// Add checked ServiceTypes
foreach (Guid serviceType in serviceTypeIds)
{
ServiceType st = db.ServiceTypes.Find(serviceType);
category.ServiceTypes.Add(st);
}
db.Entry(category).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(category);
}
: नीचे कोड SaveChanges को category.ServiceTypes पर गणना 1 होगी हो जाता है, तो कुछ संग्रह में निश्चित रूप से है। कोई विचार?
धन्यवाद।
संपादित करें:
हालांकि नीचे प्रतिक्रिया वास्तव में सही जवाब मुझे लगता है मैं पोस्ट संपादित करें विधि के निम्नलिखित अंतिम संस्करण जोड़ना होगा सोचा है:
[HttpPost]
public ActionResult Edit(Category category, Guid[] serviceTypeIds)
{
if (ModelState.IsValid)
{
// Must set to modified or adding child records does not set to modified
db.Entry(category).State = EntityState.Modified;
// Force loading of ServiceTypes collection due to lazy loading
db.Entry(category).Collection(st => st.ServiceTypes).Load();
// Clear existing ServiceTypes
category.ServiceTypes.Clear();
// Set checked ServiceTypes
if (serviceTypeIds != null)
{
foreach (Guid serviceType in serviceTypeIds)
{
ServiceType st = db.ServiceTypes.Find(serviceType);
category.ServiceTypes.Add(st);
}
}
db.SaveChanges();
return RedirectToAction("Index");
}
return View(category);
}
सूचना लाइन है कि की लोडिंग बलों सर्विस टाइप्स संग्रह, यह जरूरी है क्योंकि आलसी लोडिंग में उन बच्चों के सामान शामिल नहीं हैं, जिसका मतलब है कि सर्विस टाइप्स संग्रह को साफ़ करने से कुछ भी नहीं हुआ।
[HttpPost]
public ActionResult Edit(Category category, Guid[] serviceTypeIds)
{
if (ModelState.IsValid)
{
// Clear existing ServiceTypes
category.ServiceTypes.Clear();
db.Entry(category).State = EntityState.Modified;
// category attached now, state Modified
// Add checked ServiceTypes
foreach (Guid serviceType in serviceTypeIds)
{
ServiceType st = db.ServiceTypes.Find(serviceType);
// st attached now, state Unchanged
category.ServiceTypes.Add(st);
// EF will detect this as a change of category and create SQL
// to add rows to the link table when you call SaveChanges
}
db.SaveChanges();
return RedirectToAction("Index");
}
return View(category);
}
अपने कोड एफई में सूचना नहीं है कि आप servicetypes जोड़ लिया है क्योंकि आप के लिए श्रेणी देते हैं:
धन्यवाद स्लुमा, यह वास्तव में समस्या थी। – Gary
हालांकि आपका उत्तर अब डेटाबेस में प्रविष्टियों को सही ढंग से सहेजता है, मुझे लगता है कि जब httppost विधि संपादित की जाती है, तो श्रेणी। सेवा प्रकार की गणना 0 है, भले ही संपादन प्रतिक्रिया विधि पर यह निश्चित रूप से 1 सहेजी गई सेवा प्रकार है। कोई विचार क्या कारण है? – Gary
@ गैरी: यह एक एमवीसी मॉडलबिंडर समस्या होगी। मेरे लिए ऐसा लगता है कि इससे कोई फर्क नहीं पड़ता कि 'श्रेणी। सेवा प्रकार' में कुछ शामिल है क्योंकि आप जो भी काम कर रहे हैं वह वैसे भी उस सूची को साफ़ कर रहा है। महत्वपूर्ण केवल 'guid [] serviceTypeIds' संग्रह है क्योंकि आप उन आईडी का उपयोग करके' Find' के साथ डीबी से सर्विस टाइप टाइप कर रहे हैं और फिर लोड की गई इकाई के साथ सहयोग बनाते हैं। – Slauma