2

私はEntity Frameworkが初めてです。私はWPFアプリケーションでデータベースを操作するために使用しています。このブログのようにモデルを作成しましたが、それを自分のアプリケーションで使用したいと考えています。

次のようなエンティティを取得および変更する方法を知っています。

DatabaseContext ct = new DatabaseContext();
var person = ct.Persons.Find(1);
person.Name = "NewName";
ct.SaveChanges();

ただし、ユーザー入力を待機するアプリケーションでは、これはデータ コンテキストを ViewModel 内に維持することを意味し、あまり望ましくありません。代わりに、次のようなことをしたいと思います。

class PersonViewModel {

    Person psn;

    public PersonViewModel(int PersonId) {
         DatabaseContext ct = new DatabaseContext();
         psn = ct.Persons.Find(1);
    }

    public Save() {
        DatabaseContect ct = new DatabaseContext();
        ct.Persons.Update(psn); // (There is no Update() method.)
        ct.SaveChanges();
    }

}

やり方がわかりませんUpdate()

次のように定義された DatabaseContext があります。

public partial class DatabaseContext: DbContext
{
    public DbSet<Person> Persons { get; set; }
}

しかし、私は を持っていないようです。これはDatabaseContext.ObjectStateManager、同様の問題の解決に使用する人もいます。これがなぜなのかわかりません-POCOオブジェクトの使用に関連していますか?

これをどのように解決すればよいですか?

4

3 に答える 3

2

アタッチの代わりに:

public Save() {
    DatabaseContect ct = new DatabaseContext();
    ct.Entry(psn).State = EntityState.Modified;
    ct.SaveChanges();
}
于 2012-04-10T14:20:20.627 に答える
1

メソッドを使用する必要がありますAttach()。詳細については、http: //msdn.microsoft.com/en-us/library/bb896248.aspxをご覧ください。

 ct.Persons.Attach(psn); // instead of Update()

添付されたオブジェクトが Unchanged ステータスになり、それを Modified に更新する必要があるため、事態はさらに複雑になる可能性があります。

于 2012-04-10T14:18:30.907 に答える
1

Attach メソッドを使用できます。

public Save() {
    using(DatabaseContect ct = new DatabaseContext())
    {
      ct.Persons.Attach(psn);
      ct.SaveChanges();
    }
}
于 2012-04-10T14:18:41.187 に答える