Похоже, у вас есть проблемы с моделью данных или вас данными хочу упорствовать. Я думаю, что некоторые обязательные поля или внешний ключ не заданы при попытке сохранить объект.
Попытайтесь поймать и зарегистрировать System.Data.Entity.Infrastructure.DbUpdateException
. Он должен сказать вам, какая организация вызывает проблему. Вот код регистрации, который мы используем:
using NLog;
private static Logger Logger = LogManager.GetCurrentClassLogger();
try {
_db.SaveChanges();
}
catch (System.Data.Entity.Infrastructure.DbUpdateException upEx) {
if (upEx.Entries != null && upEx.Entries.Any()) {
Logger.Debug("DbUpdateException contained '{0}' entries:", upEx.Entries.Count());
// get info about the Entity that produced the error
foreach (var dbEntityEntry in upEx.Entries) {
if (dbEntityEntry.Entity != null) {
var entityType = dbEntityEntry.Entity.GetType();
try {
var id = entityType.GetProperty("Id").GetValue(dbEntityEntry.Entity, null);
Logger.Debug("DbUpdateException contains DbEntityEntry - Type: '{0}', Id: '{1}', State: '{2}'", entityType.Name, id, dbEntityEntry.State.ToString("G"));
} catch (Exception) {
Logger.Debug("DbUpdateException contains DbEntityEntry - Type '{0}', Id: unknown, State: '{2}'", entityType.Name, dbEntityEntry.State.ToString("G"));
}
}
}
}
}
Вы напишите весь код, в котором вы вызываете функцию CommitChanges(). –
Возможно, у вас есть пустая таблица в базе данных. Вы можете создать таблицу в проводнике сервера, заполнить ее строкой и посмотреть, не исчезла ли проблема. –