我找出解決辦法:如何更新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();
我該如何做更新?
我不使用自跟蹤實體....嗯....但是ApplyChanges方法應該來自上下文..它應該的問題,我們是什麼樣的實體使用...你使用什麼類型的conext? – jojo 2011-04-04 07:30:24
嗯,我做了一些挖掘,「ApplyChanges」方法是一個自我跟蹤實體模板附帶的擴展方法。它在更新期間處理實體的「跟蹤」。然後道歉,我會多挖一點。 – tobias86 2011-04-04 07:38:13
似乎我更好地使用「自我追蹤實體」下次... – jojo 2011-04-04 08:02:16