2012-03-27 13 views
16

मैं डाटाबेस पहले उपयोग कर रहे हैं के लिए मॉडल का हिस्सा नहीं है, एफई 4.1इकाई प्रकार List`1 वर्तमान संदर्भ

मैं "हो रही है इकाई प्रकार List`1 के लिए मॉडल का हिस्सा नहीं है वर्तमान संदर्भ। " मेरे संपादन दृश्य से रिकॉर्ड अपडेट करने का प्रयास करते समय त्रुटि।

त्रुटि

db.Entry(properties).State = EntityState.Modified; 

यहाँ पर हो रहा है मेरी मॉडल है:

public class Users 
    { 
    [Key] 
    public int User_ID { get; set; } 
    public string UserName { get; set; } 

    [NotMapped] 
    public IEnumerable<App_Properties> User_Properties 
    { 
      get { return Properties.Where(u => u.User_ID == User_ID); } 
    } 

    public virtual ICollection<App_Properties> Properties { get; set; } 
} 

public class App_Properties 
{ 
    [Key] 
    public int Prop_ID { get; set; } 
    public int User_ID { get; set; } 
    public int App_ID { get; set; } 
    public string Key { get; set; } 
    public string Value { get; set; } 
    public DateTime DateEntered { get; set; } 
    public DateTime DateModified { get; set; } 

    [ForeignKey("User_ID")] 
    public virtual Users Users { get; set; } 
} 

यहाँ मेरी नियंत्रक है:

[HttpPost] 
public ActionResult Edit(ICollection<App_Properties> properties) 
{ 
    if (ModelState.IsValid) 
    { 
      foreach (var item in properties) 
      { 
       db.Entry(properties).State = EntityState.Modified; 
      } 

      db.SaveChanges(); 

      return RedirectToAction("Index"); 
    } 

    return View(properties); 
} 

मुझे लगता है foreach पाश की स्थापना में उपयुक्त नहीं है एक आईसीलेक्शन में प्रत्येक आइटम के लिए EntityState।

किसी भी सहायता की सराहना की जाएगी। ताकि आप एक ही बार में पूरे संग्रह संलग्न करने के लिए कोशिश कर रहे थे,

foreach (var item in properties) 
{ 
    db.Entry(item).State = EntityState.Modified; 
} 

आप db.Entry(properties) बुला गया:

+1

एक त्वरित अर्थ ध्यान दें, नाम App_Properties.Users अर्थ होगा एकाधिक उपयोगकर्ता, एक नहीं। सम्मेलन यह माना जाता है कि एक ऑब्जेक्ट का एकवचन नाम है क्योंकि 'var users = new users()' लोगों का संग्रह है, एक आइटम नहीं। – Leniency

+0

हाँ, धन्यवाद ... मेरे पास डीबी का कोई नियंत्रण नहीं है और मैंने टेबल के अनुचित नामकरण को मेरे कोड में फैलाने दिया है। –

+0

डीबी नामों को हालांकि नहीं करना है - वास्तविक पीओसीओ के मैपिंग को वास्तविक डेटाबेस तालिका में बदलने के लिए बहुत आसान है OnModelCreating: 'modelbuilder.Entity ()। टोटेबल (" उपयोगकर्ता ")'। उपयोगकर्ता वर्ग पर एक साधारण एफ 2 नाम बदलकर आपके प्रोजेक्ट में नाम बदल देगा। संपत्ति के नामों के साथ ही - आप इसे किसी भी कस्टम मानचित्र कर सकते हैं। http://weblogs.asp.net/scottgu/archive/2010/07/23/entity-framework-4-code-first-custom-database-schema-mapping.aspx – Leniency

उत्तर

41

करने के लिए अपने पाश बदलने का प्रयास करें। DbContext.Entry (ऑब्जेक्ट) expects a single object, संग्रह नहीं।

+1

धन्यवाद .. वह उस त्रुटि से छुटकारा पा लिया लेकिन "ऑब्जेक्टस्टेटमेनगर त्रुटि में एक ही कुंजी वाला ऑब्जेक्ट पहले से मौजूद है।" मैं http://stackoverflow.com/questions/8254854/object-with-same-key-already-exists-in-objectstatemanager से उस त्रुटि के साथ सहायता प्राप्त करने में सक्षम था। –

+0

धन्यवाद ... यह सहायक था –

8

उत्तर के लिए धन्यवाद, क्षमता। महान काम किया। तो निम्नलिखित LINQ इस्तेमाल किया

क्या इसके लायक है के लिए, मैं एक पंक्ति पर मेरी EntityState.Modified कार्य रखना पसंद करते हैं (जैसा कि मैंने गुणकों है):

properties.ForEach(p => db.Entry(p).State = EntityState.Modified); 
संबंधित मुद्दे