Я читал несколько вопросов, подобных этому, но ни одна из них не является моей ситуацией.Linq-To-Sql SubmitChanges Не обновлять базу данных
Использование linq-to-sql Вставьте новую запись и отправьте изменения. Затем, в том же веб-запросе, я беру ту же самую запись и обновляю ее, а затем отправляю изменения. Изменения не сохраняются. DatabaseContext одинаковый для обеих этих операций.
Вставка:
var transaction = _factory.CreateTransaction(siteId, userId, questionId, type, amount, transactionId, processor);
using (IUnitOfWork unitOfWork = UnitOfWork.Begin())
{
transaction.Amount = amount;
_transactionRepository.Add(transaction);
unitOfWork.Commit();
}
Выбор и обновление:
ITransaction transaction = _transactionRepository.FindById(transactionId);
if (transaction == null) throw new Exception(Constants.ErrorCannotFindTransactionWithId.FormatWith(transactionId));
using (IUnitOfWork unitOfWork = UnitOfWork.Begin())
{
transaction.CrmId = crmId;
transaction.UpdatedAt = SystemTime.Now();
unitOfWork.Commit();
}
Вот единица работы кода:
public virtual void Commit()
{
if (_isDisposed)
{
throw new ObjectDisposedException(GetType().Name);
}
_database.SubmitChanges();
}
Я даже пошел в файл designer.cs и положить точка останова в поле, которое устанавливается, но не обновляется. Я прошел через и он вошел и выполнить set
код, поэтому Entity следует получать «уведомление» изменения в этой области:
public string CrmId
{
get
{
return this._CrmId;
}
set
{
if ((this._CrmId != value))
{
this.OnCrmIdChanging(value);
this.SendPropertyChanging();
this._CrmId = value;
this.SendPropertyChanged("CrmId");
this.OnCrmIdChanged();
}
}
}
Другая полезная информация:
- ObjectTracking включен
- Нет ошибок или исключений при вызове второй SubmitChanges (просто молчал обновление)
- Профилировщик SQL показывает вставку и выбирает, но не следующий оператор обновления. Linq-To-Sql не создает инструкцию обновления.
- Существует только одна база данных, одна строка базы данных, поэтому обновление не собирается в другую базу данных.
- Таблица имеет первичный ключ.
Я не знаю, что могло бы заставить Linq-To-Sql не выдавать команду обновления и не поднимать какую-либо ошибку. Возможно, проблема связана с использованием того же экземпляра DataContext? Я даже обновил объект из базы данных, используя метод DataContact.Refresh, прежде чем он будет извлечен для обновления, но это не помогло.
Можете ли вы предоставить MCVE для этого? Без какого-либо кода он оставляет нам догадки о том, что может пойти не так. – Becuzz
Вы должны уведомить вашу организацию о том, что содержимое было изменено. Я верю в ваше дело, что ваша сущность не знает об изменениях, поэтому игнорирует вашу команду. Пожалуйста, предоставьте код, который поможет вам, поскольку мы догадываемся, что происходит не так. –
Спасибо. Код предоставлен. Я использую репозиторий и фабричные шаблоны, поэтому я не знаю, насколько это полезно. Джордж, как я могу уведомить мою сущность, которая изменилась? –