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

どうすれば更新できますか?

4

3 に答える 3

6

返信が遅くなりましたが、コミュニティに役立つと思います。更新方法をこれに変更します

ctx.entities.Attach(entity);
var entry= ctx.Entry(entity);
entry.State = EntityState.Modified;
ctx.SaveChanges();
于 2012-04-28T21:38:39.347 に答える
0

ApplyChangesメソッドは、次のようなものになる可能性があります。

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

注: EF4サービスでは自己追跡エンティティT4テンプレートを使用しています

于 2011-04-04T07:20:15.063 に答える
0

たぶん、Attach メソッドが役立ちますか? 詳細については、この記事をご覧ください。

void UpdateObject(Entity e) {
  Entity tmp = ctx.Entities.Attach(e);
  ctx.SaveChannges();
}
于 2011-04-04T08:30:18.117 に答える