2011-04-04 11 views
5

मैं समाधान पता लगाना: जब मैं एक अद्यतन करने के लिए कोशिशमैं ईएफ सीएफ में एक इकाई ऑब्जेक्ट (डिटेच) कैसे अपडेट कर सकता हूं?

MyEntity tmp = ctx.Entities.Where<MyEntity>(t => t.Id == objectWithNewValues.Id).SingleOrDefault(); 
if (tmp != null) 
{ 
    var entityInDb = ctx.Entry(tmp); 
    entityInDb.CurrentValues.SetValues(objectWithNewValues); 
    ctx.SaveChanges(); 
} 
else 
{ 
    throw new ArgumentException ... 
} 

इससे पहले कि मैं EF4 इस्तेमाल किया, स्कीमा से कोड उत्पन्न संदर्भ एक विधि "context.ApplyCurrentValue (इकाई)"

होगा वस्तु को अलग, मैं कर सकते हैं:

void UpdateObject(Entity e) 
{  
    Entity tmp = ctx.Entities.Where(t=>t.id ==e.id); 
    ctx.ApplyCurrentValue(e); 
    ctx.SaveChannges(); 
} 

अब मैं एक परियोजना EF4 कोड पहले दृष्टिकोण का उपयोग किया है और मैं अब और नहीं मिल सकता है "ApplyCurrentValue" विधि।

तो मैं अद्यतन कार्रवाई कैसे कर सकता हूं?

इकाई वर्ग एक बहुत ही सरल वर्ग

public class MyEntity 
{ 
    [Key] 
    public Guid Id {get;set;} 
    ... 
} 

मेरी संदर्भ एक भी एक बहुत ही सरल वर्ग inherte DBContext

public MyContext : DBContext 
{ 
    public DBSet<MyEntity> Entities {get;set} 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 
     modelBuilder.Entity<MyEntity>().ToTable("tblMyEntity"); 
    } 
} 

और मुझे नीचे के रूप में कुछ करने के लिए कोशिश कर रहा हूँ है। लेकिन मान डेटाबेस में अद्यतन नहीं मिला था!

ctx.entities.Attach(entity); 
var entityInDb = ctx.Entry(entity); 
entityInDb.CurrentValues.SetValues(entity); 
context.SaveChanges(); 

मैं अद्यतन कैसे कर सकता हूं?

उत्तर

0

ApplyChanges विधि हो सकता है कि तुम क्या करने के बाद कर रहे हैं:

model.ApplyChanges("Objects", object); 
model.SaveChanges(); 
object.AcceptChanges(); 

नोट: हम अपने EF4 सेवा में आत्म-ट्रैकिंग संस्थाओं टी -4 टेम्पलेट्स का उपयोग कर रहे

+0

करने के लिए अपने अद्यतन पद्धति को बदलने मैं स्वयं ट्रैकिंग संस्थाओं उपयोग नहीं कर रहा .... हममम .... लेकिन ApplyChanges विधि संदर्भ से आना चाहिए .. इससे कोई फर्क चाहिए इकाई किस तरह हम कर रहे हैं उपयोग कर रहे हैं ... आप किस प्रकार का conext उपयोग कर रहे हैं? – jojo

+0

हम्म, मैंने कुछ खुदाई की और "ApplyChanges" विधि एक विस्तार विधि है जो स्व-ट्रैकिंग इकाइयों टेम्पलेट के साथ आता है। यह अद्यतन के दौरान इकाई के "ट्रैकिंग" को संभालता है। तब माफ़ी, मैं थोड़ा और खोदना होगा। – tobias86

+0

लगता है कि मैं अगली बार "स्व-ट्रैकिंग इकाई" का बेहतर उपयोग करता हूं ... – jojo

0

शायद संलग्न विधि होगा मदद? अधिक जानकारी के लिए this article पर एक नज़र डालें।

void UpdateObject(Entity e) { 
    Entity tmp = ctx.Entities.Attach(e); 
    ctx.SaveChannges(); 
} 
6

देर से उत्तर, लेकिन मुझे लगता है कि यह समुदाय की मदद करेगा। इस

ctx.entities.Attach(entity); 
var entry= ctx.Entry(entity); 
entry.State = EntityState.Modified; 
ctx.SaveChanges(); 
संबंधित मुद्दे