Я пытаюсь создать какой-либо метод, который может обновлять любые измененные данные из измененного объекта данных (этот объект создается ASP.NET MVC) до старого объекта данных (этот объект извлекается из текущих данных в СУБД), например, следующий код.
public static bool UpdateSomeData(SomeEntities context, SomeModelType changedData)
{
var oldData = GetSomeModelTypeById(context, changedData.ID);
UpdateModel(oldData, changedData);
return context.SaveChanges() > 0;
}
Я пытаюсь создать метод для сохранения любых измененных данных без влияния на другие неизмененные данные, такие как следующий исходный код.
public static void UpdateModel<TModel>(TModel oldData, TModel changedData)
{
foreach (var pi in typeof(TModel).GetProperties()
.Where
(
// Ignore Change ID property for security reason
x => x.Name.ToUpper() != "ID" &&
x.CanRead &&
x.CanWrite &&
(
// It must be primitive type or Guid
x.PropertyType.FullName.StartsWith("System") &&
!x.PropertyType.FullName.StartsWith("System.Collection") &&
!x.PropertyType.FullName.StartsWith("System.Data.Entity.DynamicProxies")
)
)
{
var oldValue = pi.GetValue(oldData, null);
var newValue = pi.GetValue(changedData, null);
if (!oldValue.Equals(newValue))
{
pi.SetValue(oldData, newValue, null);
}
}
}
Я не уверен в вышеуказанном методе, потому что это очень уродливый метод обновления данных. Из недавней ошибки я понял, что если вы обновите какое-либо свойство, такое как Свойства навигации (связанные данные из другой таблицы), оно удалит текущую запись из базы данных. Я не понимаю, почему это произошло. Но это очень опасно для меня.
Итак, есть ли у вас идеи по этому вопросу, чтобы убедиться, что я обновляю данные из ASP.NET MVC?
Спасибо