JavaScript から呼び出される Web サービスがあります。JS は、後でサーバー内の Entity オブジェクトにキャストされるオブジェクトを渡します。問題は、渡された JSON に存在しないフィールドがエンティティにあることです。これらの存在しないフィールドは、DB で null 値に更新されます。
たとえば、Password フィールドを持つ Customer テーブルがあるとします。パスワードは公開されず、Web サービス オブジェクトから取得されません。しかし、Customer 行を更新すると、パスワードが null に設定されます。Password フィールドを変更しないように EF に指示する方法はありますか?
フィールドを手動でコピーすることもできましたが、必要なフィールドを自動的に保存する Web ページを作成しようとしています。使用されるコードの一部を次に示します。T は Entity クラスのジェネリックです。
private ObjectContext _context;
private IObjectSet<T> _objectSet;
protected abstract ObjectContext getObjectContext();
private ObjectContext prepareObjectContext()
{
_context = getObjectContext();
_objectSet = _context.CreateObjectSet<T>();
return _context;
}
[HttpPost]
public override ActionResult Save(SavedData data)
{
using (ObjectContext oc = prepareObjectContext())
{
if (data.inserted != null && data.inserted.Count > 0)
{
foreach (T row in data.inserted)
{
_objectSet.AddObject(row);
_context.ObjectStateManager.ChangeObjectState(row, System.Data.EntityState.Added);
}
}
if (data.updated != null && data.updated.Count > 0)
{
foreach (T row in data.updated)
{
_objectSet.Attach(row);
_context.ObjectStateManager.ChangeObjectState(row, System.Data.EntityState.Modified);
}
}
if (data.deleted != null && data.deleted.Count > 0)
{
foreach (T row in data.deleted)
{
_objectSet.Attach(row);
_objectSet.DeleteObject(row);
_context.ObjectStateManager.ChangeObjectState(row, System.Data.EntityState.Deleted);
}
}
oc.SaveChanges();
//CMManagement.Models.CMEntities
ViewBag.columns = Columns;
return Json(false);
}
}