我已閱讀了與此類似的多個問題,但沒有一個是我的情況。Linq-To-Sql SubmitChanges不更新數據庫
使用LINQ到SQL我插入一個新的記錄,並提交更改。然後,在同一個Web請求中,我提取相同的記錄並更新它,然後提交更改。更改不會保存。這兩個操作的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
代碼,因此實體應該得到改變的「通知」對這一領域:
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
您必須通知您的實體內容已被修改。我相信你的情況下你的實體並不知道這些變化,這就是爲什麼它忽略了你的命令。請提供代碼以幫助您,因爲我們正在猜測發生了什麼問題。 –
謝謝。代碼已經提供。我使用倉庫和工廠模式,所以我不知道這是多麼有用。喬治,我怎麼能通知我的實體已經改變了? –