0

EFモデルファーストアプローチを使用して設計されたDbを持つ既存のアプリケーションがあるとします。私はUsersテーブルを持っています。クライアントコードがUsersテーブルDALロジックプロジェクトのEFエンティティを単純なオブジェクト(単純なC#クラスですが、それをUserEntryクラスと呼ぶ)に読み込もうとします。エンティティフレームワークの投影または

今はUserEntryクラスを使用するUpdateメソッドを追加する必要があります。だから私はUserEntryクラスでどのフィールドが変更されたのかをどうやって追跡すればよいのだろうかと思っています。

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

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

+0

なぜEntity Frameworkでそれに対処できないのですか?これは、EFコードファーストORM抽象化の全体点です。 – Tejs

+0

EF内の自己追跡エンティティについて読む –

+0

@Tejs私は簡単に操作でき、パフォーマンスの問題もない、クリーンでシンプルなクラスが必要です(http://stackoverflow.com/questions/7587232/entity-framework-projection-into-class- ef-poco-objectsを選択するよりも高速です)。だからCFを使うことを提案していますか?この場合、データベースを元に戻す必要があります。 –

答えて

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

をし、それが特別なアップデート方法に変更し、不要として追跡したものは何でも保存されます:あなたはそれをおせっかい完了したら、あなただけ呼び出します。

切断されたエンティティ(ウェブサイトやなど)で作業しているしかし、あなたはそれが追跡の範囲外だったときエンティティが変更されたことをDbContext教えてくれます追加の行を追加する必要がある場合:

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

ていますあなたが必要とするものはほとんどすべてです。