Entity Framework 5 レコードの更新 質問する

Entity Framework 5 レコードの更新 質問する

私は、ASP.NET MVC3 環境の Entity Framework 5 内でレコードを編集/更新するさまざまな方法を検討してきましたが、これまでのところ、必要な条件をすべて満たす方法はありません。その理由を説明します。

私は 3 つの方法を見つけました。それぞれの長所と短所を挙げます。

方法1 - 元のレコードを読み込み、各プロパティを更新する

var original = db.Users.Find(updatedUser.UserId);

if (original != null)
{
    original.BusinessEntityId = updatedUser.BusinessEntityId;
    original.Email = updatedUser.Email;
    original.EmployeeId = updatedUser.EmployeeId;
    original.Forename = updatedUser.Forename;
    original.Surname = updatedUser.Surname;
    original.Telephone = updatedUser.Telephone;
    original.Title = updatedUser.Title;
    original.Fax = updatedUser.Fax;
    original.ASPNetUserId = updatedUser.ASPNetUserId;
    db.SaveChanges();
}    

長所

  • どのプロパティを変更するか指定できる
  • ビューにはすべてのプロパティを含める必要はない

短所

  • オリジナルをロードして更新するためにデータベースに2回クエリを実行する

方法2 - 元のレコードを読み込み、変更された値を設定する

var original = db.Users.Find(updatedUser.UserId);

if (original != null)
{
    db.Entry(original).CurrentValues.SetValues(updatedUser);
    db.SaveChanges();
}

長所

  • 変更されたプロパティのみがデータベースに送信されます

短所

  • ビューにはすべてのプロパティを含める必要がある
  • オリジナルをロードして更新するためにデータベースに2回クエリを実行する

方法 3 - 更新されたレコードを添付し、状態を EntityState.Modified に設定する

db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();

長所

  • 更新するデータベースに対するクエリ x 1

短所

  • どのプロパティが変更されるかを指定できません
  • ビューにはすべてのプロパティが含まれている必要があります

質問

皆さんに質問です。この一連の目標を達成できる明確な方法はあるでしょうか?

  • どのプロパティを変更するか指定できる
  • ビューにはすべてのプロパティ (パスワードなど) を含める必要はありません。
  • 更新するデータベースに対するクエリ x 1

これは指摘すべき些細なことだと理解していますが、簡単な解決策を見逃している可能性があります。そうでなければ、方法 1 が優先されます ;-)

ベストアンサー1

あなたは探している:

db.Users.Attach(updatedUser);
var entry = db.Entry(updatedUser);
entry.Property(e => e.Email).IsModified = true;
// other changed properties
db.SaveChanges();

おすすめ記事