私は解決策を見つけます:
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(entity)" メソッドが含まれます。
デタッチ オブジェクトを更新しようとすると、次のことができます。
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;}
...
}
私のコンテキストは、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();
どうすれば更新できますか?