我有一个从 JavaScript 调用的 Web 服务。JS 传递一个对象,该对象稍后被强制转换为服务器中的 Entity 对象。问题是实体中的某些字段在传递的 JSON 中不存在。这些不存在的字段在数据库中更新为空值。
例如,您有一个带有密码字段的客户表。密码未公开,也未从 Web 服务对象中检索。但是当我更新客户行密码设置为空。有没有办法告诉 EF 不要更改密码字段?
我本可以手动复制这些字段,但我正在尝试制作一个网页来自动保存我想要的字段。这是使用的一些代码。T 对于实体类是通用的。
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);
}
}