1. ホーム
  2. c#

[解決済み] Entity Framework 5 レコードを更新する

2022-03-20 03:12:49

質問

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 x データベースへのクエリでオリジナルをロードし、それを更新する

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

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

プロフェッショナル

  • 更新のためのデータベースへのクエリ x 1

短所

  • 変更するプロパティを指定できない
  • ビューはすべてのプロパティを含む必要があります

質問

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

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

かなり些細な指摘であることは理解していますが、これに対する簡単な解決策を見逃しているのかもしれません。もしそうでなければ、この方法を採用します。)

解決方法は?

探しているのは

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