ADO.NET Entity Framework SaveChanges не работает - PullRequest
2 голосов
/ 26 октября 2010

У меня есть приложение .NET 4 WinForms, которое использует ADO.NET Entity Framework. Какой-то код, который работал отлично, решил перестать работать, и хотя я попытался выяснить, что изменилось, что может вызвать это, я в тупике. Этот код выглядит совершенно функциональным для меня, и БЫЛО работать как задумано.

У кого-нибудь есть идеи? Вот код:

using (var pe = new ProposalEstimateEntities()) 
{
    var tmc = GetToolingAndMaterialsCost(taskId, Constants.Materials);

    if (tmc == null) return;

    tmc.Amount = amount;
    pe.SaveChanges();
}

Переменная tmc содержит объект сущности ToolingAndMaterialsCost после вызова метода, поэтому нет необходимости добавлять объект в контекст. SaveChanges () должен сохранить объект с новой суммой, но не делает. Не исключение не выбрасывается. Код выполняется так, как будто он тупой и счастливый, но в базе данных ничего не меняется, и когда я возвращаюсь к элементу управления, отображающему данные, старые прежние данные перед редактированием присутствуют.

Это очень расстраивает, любая помощь будет принята с благодарностью.

Mike

Ответы [ 3 ]

1 голос
/ 26 октября 2010

Как был загружен tmc без ссылки на ObjectContext 'pe'?Похоже, вы можете загружать его из другого контекста ??

Если это так, это не сработает.Контекст отслеживает сущности, которые изменились.Вы 'pe' контекст не отслеживает никакие сущности по внешнему виду, поскольку на него никогда не ссылаются, за исключением вызова SaveChanges.

0 голосов
/ 26 октября 2010

Doh!

При вызове GetToolingAndMaterialsCost используется объект ProposalEstimateEntities, отличный от объекта метода, поэтому я просто добавил объект сущности в контекст данных, и он работал нормально. Otsmarted себя, когда я рефакторинг.

0 голосов
/ 26 октября 2010

Я бы прошел через отладчик, чтобы убедиться, что tmc не равен нулю.Если tmc действительно является сущностью с полем Amount, это должно работать нормально, и проблема, вероятно, в другом месте.Как насчет кода из метода GetToolingAndMaterialsCost?

...