エンティティ クラスpublic bool isActive
などに多数のブール型プロパティがあるとします。値は、Web アプリケーションでチェック ボックスを設定することによって操作されます。たとえば、一度に 1 つの変更された名前と値のペアと主キー { isActive : true , NewsPageID: 34 }
のみをポストバックし、既定のモデル バインダーは、これら 2 つのプロパティ セットのみを使用して NewsPage オブジェクトを作成します。ここで、以下のコードを実行すると、モデル バインダーによって作成された NewsPage オブジェクトに設定されたプロパティの値が更新されるだけでなく、もちろん、既存のエンティティ オブジェクトに設定されていない他のすべての値を null にしようとします。モデル バインダーによって作成された NewsPage オブジェクトには設定されません。
エンティティ フレームワークに、null に設定されているプロパティを調べないように指示し、それらの変更を取得したエンティティ オブジェクト、つまりデータベースに保持しようとすることは可能ですか? おそらく、モデル バインダーによって作成された NewsPage オブジェクトの null 以外の値とそのプロパティ名のみを利用し、それらの特定のプロパティのみを更新しようとするコードを書くことができますか?
[HttpPost]
public PartialViewResult SaveNews(NewsPage Np)
{
Np.ModifyDate = DateTime.Now;
_db.NewsPages.Attach(Np);
_db.ObjectStateManager.ChangeObjectState(Np, System.Data.EntityState.Modified);
_db.SaveChanges();
_db.Dispose();
return PartialView("MonthNewsData");
}
もちろん、以下のようなこともできますが、最適な解決策ではないと感じています。特に、設定する必要がある 6 つのブール値プロパティがあることを考えると。
[HttpPost]
public PartialViewResult SaveNews(int NewsPageID, bool isActive, bool isOnFrontPage)
{
if (isActive != null) { //Get entity and update this property }
if (isOnFontPage != null) { //Get entity and update this property }
}