2011-04-04 39 views
5

我找出解決辦法:如何更新EF CF中的實體對象(分離)?

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(); 

注:我們使用自跟蹤實體T4模板在我們EF4服務

+0

我不使用自跟蹤實體....嗯....但是ApplyChanges方法應該來自上下文..它應該的問題,我們是什麼樣的實體使用...你使用什麼類型的conext? – jojo 2011-04-04 07:30:24

+0

嗯,我做了一些挖掘,「ApplyChanges」方法是一個自我跟蹤實體模板附帶的擴展方法。它在更新期間處理實體的「跟蹤」。然後道歉,我會多挖一點。 – tobias86 2011-04-04 07:38:13

+0

似乎我更好地使用「自我追蹤實體」下次... – jojo 2011-04-04 08:02:16

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(); 
相關問題