Entity Framework не сохраняет измененных детей
Расстраивает это. Вот's пара связанных объектов, сгенерированных Entity Framework первой базы данных:
public partial class DevelopmentType
{
public DevelopmentType()
{
this.DefaultCharges = new HashSet();
}
public System.Guid RowId { get; set; }
public string Type { get; set; }
public virtual ICollection DefaultCharges { get; set; }
}
public partial class DefaultCharge
{
public System.Guid RowId { get; set; }
public decimal ChargeableRate { get; set; }
public Nullable DevelopmentType_RowId { get; set; }
public virtual DevelopmentType DevelopmentType { get; set; }
}
Вот'это код, который яm, чтобы спасти DevelopmentType - он включает в себя автомат, так как мы отличаем объекты объектов от DTO:
public void SaveDevelopmentType(DevelopmentType_dto dt)
{
Entities.DevelopmentType mappedDevType = Mapper.Map(dt);
_Context.Entry(mappedDevType).State = System.Data.EntityState.Modified;
_Context.DevelopmentTypes.Attach(mappedDevType);
_Context.SaveChanges();
}
В моем пользовательском интерфейсе наиболее распространенной операцией будет просмотр пользователем списка DevelopmentTypes и обновление их DefaultCharge. Поэтому, когда я проверяю это с помощью приведенного выше кода, он работает без ошибок, но на самом деле ничего не меняется.
Если я остановлюсь в отладчикеПонятно, что измененный DefaultCharge передается в функцию, и чтоs прикреплен к DevelopmentType для сохранения.
Если я изменю значение вручную в Visual Studio,делает сохранить обновленное значение. Что еще более запутанно.
Мониторинг базы данных с помощью SQL Server Profiler показывает, что выполняются команды обновлениятолько для родительского объекта ине для любых прикрепленных объектов.
У меня есть другой аналогичный код в другом месте, который функционирует как ожидалось. Что я здесь не так делаю?
РЕДАКТИРОВАТЬ:
Я обнаружил, что если вы делаете это до вызова SaveDevelopmentType:
using (TransactionScope scope = new TransactionScope())
{
dt.Type = "Test1";
dt.DefaultCharges.First().ChargeableRate = 99;
_CILRepository.SaveDevelopmentType(dt);
scope.Complete();
}
Изменение типа сохраняет, а изменение ChargeableRate - нет. Я неЯ не думаю, что это помогает, но я подумал,Я бы добавил это.