2010-08-06 10 views
5

मैं एक अलग POCO डब्ल्यू/एफई 4 CTP अद्यतन करने के लिए कोशिश कर रहा हूँ 4.अद्यतन एफई 4 फ़ीचर सीटीपी 4 अलग POCO

मेरे डोमेन वर्ग इस तरह दिखता है:

public class User { 
    public int Id { get; set; } 

    [Required, DisplayName("First Name")] 
    public string FirstName { get; set; } 

    [Required, DisplayName("Last Name")] 
    public string LastName { get; set; } 

    [ConcurrencyCheckAttribute, Timestamp] 
    public byte[] DataVersion { get; set; } 
} 

भंडार मेरे पास में निम्नलिखित:

public void SaveUser(User user) { 
    if (user.Id > 0) { 
    dbContext.Users.Attach(user); 
    } 
    else { 
    dbContext.Users.Add(user); 
    } 
    dbContext.SaveChanges(); 
} 

dbContext डीबीकॉन्टेक्स्ट से विरासत में मिलता है।

मैं आवेषण ठीक करने में सक्षम हूं, लेकिन अनुलग्नक काम नहीं करता है। मैं एसक्यूएल प्रोफाइलर चलाता हूं, और अपडेट के लिए कोई एसक्यूएल नहीं भेजा जाता है।

उत्तर

6

मैं यह पता लगा मिला ....

dbContext वर्ग में मैं एक विधि है कि इकाई के रूप में संशोधित निशान गयी।

public void MarkAsModified(object entity) { 
    base.ObjectContext.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified); 
} 

मेरे भंडार विधि अब इस

public void SaveUser(User user) { 
    if (user.Id > 0) { 
    dbContext.Users.Attach(user); 
    dbContext.MarkAsModified(user); 
    } 
    else { 
    dbContext.Users.Add(user); 
    } 

    dbContext.SaveChanges(); 
} 
+0

हाय। मैंने अब "लिनक में अलग ऑब्जेक्ट को अपडेट करने" के लिए लंबे समय तक खोज की है और दोनों लाइनें अब काम कर रही हैं 'डीबी.उसरप्रोफाइलसेट.एटैच (यूजर)' डीबी.ऑब्जेक्टस्टेट मैनेजर। चेंजऑब्जेक्टस्टेट (यूजर, एंटिटीस्टेट। मॉडिफाइड) ' – Nasenbaer

2

तरह लग रहा है मैं जानता हूँ कि यह मूल रूप से एक ही बात कर रहा है, लेकिन क्या मेरे द्वारा की गई एक विधि GetForUpdate या कुछ इसी तरह कहा जाता है अपने प्रयोक्ता भंडार में है :

012:

public User GetForUpdate(int id) 
{ 
    var u = new User(); 
    u.Id = id; 
    dbContext.Users.Attach(u); 
    return u; 
} 

फिर जब आप "अद्यतन" एक ज्ञात आईडी के साथ एक उपयोगकर्ता के लिए चाहते हैं

उपयोगकर्ता और संलग्न करने के बाद गुणों को संशोधित करने से स्वचालित रूप से EntityStateModified के रूप में सेट हो जाएगा।

एचटीएच

+0

गोचा , पारितोषिक के लिए धन्यवाद। इसके साथ एकमात्र मुद्दा यह है कि मैं एमवीसी का उपयोग कर रहा हूं, और मॉडल बाइंडिंग का लाभ लेना चाहता हूं। आपके उदाहरण में, मुझे repo.GetForUpdate को फिर अपडेट मॉडल को कॉल करना होगा और फिर सहेजें। लेकिन यह जानना अच्छा है कि विकल्प हैं। – xxx

+0

क्षमा करें, आपके प्रश्न को ऊपर नहीं उठा सकते (पर्याप्त प्रतिनिधि नहीं) – xxx

+0

@xxx - कोई चिंता नहीं। – TheCloudlessSky

संबंधित मुद्दे