[HttpPost]
public ActionResult Edit(Master master)
{
if (ModelState.IsValid)
{
db.Master.Attach(master); // 附加到DBContext
SetModifiedPropertyByNeed < Master > (master); // 把前天传递过来的JsonModel字段都标记为更新
db.SaveChanges();
return RedirectToAction( " Index " );
}
return View(master);
}
public ActionResult Edit(Master master)
{
if (ModelState.IsValid)
{
db.Master.Attach(master); // 附加到DBContext
SetModifiedPropertyByNeed < Master > (master); // 把前天传递过来的JsonModel字段都标记为更新
db.SaveChanges();
return RedirectToAction( " Index " );
}
return View(master);
}
利用反射,查找Model中 传递过来的指定字段,并将其 stateEntry 设置为 已更新。
public
void
SetModifiedPropertyByNeed
<
T
>
(T t)
{
if (t == null )
{
return ;
}
System.Reflection.PropertyInfo[] properties = t.GetType().GetProperties();
if (properties.Length <= 0 )
{
return ;
}
foreach (System.Reflection.PropertyInfo item in properties)
{
string name = item.Name; // 名称
object value = item.GetValue(t, null ); // 值
if (item.PropertyType.IsValueType || item.PropertyType.Name.StartsWith( " String " ))
{
if (value != null )
{ // 值不为null的都是需要更新的字段。
var stateEntry = ((IObjectContextAdapter)db).ObjectContext
.ObjectStateManager.GetObjectStateEntry(t);
stateEntry.SetModifiedProperty(name);
}
}
else
{
SetModifiedPropertyByNeed(value);
}
}
}
{
if (t == null )
{
return ;
}
System.Reflection.PropertyInfo[] properties = t.GetType().GetProperties();
if (properties.Length <= 0 )
{
return ;
}
foreach (System.Reflection.PropertyInfo item in properties)
{
string name = item.Name; // 名称
object value = item.GetValue(t, null ); // 值
if (item.PropertyType.IsValueType || item.PropertyType.Name.StartsWith( " String " ))
{
if (value != null )
{ // 值不为null的都是需要更新的字段。
var stateEntry = ((IObjectContextAdapter)db).ObjectContext
.ObjectStateManager.GetObjectStateEntry(t);
stateEntry.SetModifiedProperty(name);
}
}
else
{
SetModifiedPropertyByNeed(value);
}
}
}
参考文献:
1 、dudu的 新问题新方法:在Entity Framework中实现指定字段更新