0

EFModelFirstアプローチを使用して設計されたDbを使用した既存のアプリケーションがあるとします。クライアントコードがUsersテーブルからエントリを読み取ろうとすると、Usersテーブルがあります。DALロジックはEFエンティティをプレーンオブジェクトに投影します(これは単純なC#クラスであり、UserEntryクラスと呼びましょう)。

今、UserEntryクラスを取るUpdateメソッドを追加する必要があります。だから私はUserEntryクラスでどのフィールドが変更されたかをどのように追跡する必要があるのか​​疑問に思っていますか?

確かに私はすべてのデータを保存することができますが、私はそのようなアプローチはしません。

既存のソリューションを完全にリファクタリングできます。UserEntryクラスを削除することもできます。どのアプローチを選ぶべきですか?DbContextジェネレーターを使用してPOCOクラスを生成するか、たとえばEF Power Toolsを使用して、コードファーストアプローチに移行しますか?

4

1 に答える 1

0

使用しているEFのバージョンがわからないため、次のような方法でDbContextを自由に使用できると想定します。

public class YourContext : DbContext
{
    public DbSet<User> Users {get;set;}
}

まず、次のようなメソッドをユーザーにロードして、DbContextがそれを追跡するようにします。

YourContext db = new YourContext();

public User Get(int userId)
{
    return db.Users.Find(userId);
}

これでメモリ内にあり、返されたオブジェクトを操作します。あなたがそれをいじり終えたら、あなたはただ電話します:

db.SaveChanges() 

変更されたものとして追跡されたものはすべて保存され、特別なUpdateメソッドは必要ありません。

ただし、切断されたエンティティ(Webサイトなど)を使用している場合は、追跡範囲外のときにエンティティが変更されたことをDbContextに通知する行を追加する必要があります。

public void Update(User user)
{
    db.Entry(user).State = EntityState.Modified;
    db.SaveChanges();
}

必要なのはこれだけです。

于 2012-05-05T13:25:08.297 に答える