我在我的MVC
應用程序上使用async/await
,當調用context.SaveChangesAsync()
(它甚至發生在不使用異步時)時,我得到一個DataException
。更新拋出DataException
我實施的工作單元模式發現here我試過了一切,改變代碼,使用同步代替,評論調用線等我沒有想法。我的實體不會更新。但他們確實得到了創造性思維。
這裏是我的一段代碼:
// Inside POST EDIT
try {
if (ModelState.IsValid) {
unitOfWork.StudentRepository.Update(student);
await unitOfWork.SaveAsync();
return RedirectToAction("Index");
}
} catch (DataException) {
ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persist see your system administrator");
}
// Inside Repository -- It's a generic type defined as
// public class GenericRepository<TEntity> : IGenericRepository<TEntity>
// where TEntity : class { .......
public GenericRepository(SchoolContext context) {
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public virtual void Update(TEntity entityToUpdate) {
dbSet.Attach(entityToUpdate);
context.Entry(entityToUpdate).State = EntityState.Modified;
}
// Inside UnitOfWork
public Task<int> SaveAsync() {
return context != null ? context.SaveChangesAsync() : Task.FromResult<int>(1);
}
更新:做了許多研究後,我發現人們使用剪斷這樣的代碼:
public void ApplyStateChanges()
{
foreach (var dbEntityEntry in ChangeTracker.Entries())
{
var entityState = dbEntityEntry.Entity as EntityBase;
if (entityState == null)
throw new InvalidCastException("All entites must implement the IObjectState interface, " +
"this interface must be implemented so each entites state can explicitely determined when updating graphs.");
dbEntityEntry.State = StateHelper.ConvertState(entityState.State);
}
}
和SaveChangesAsync()
之前調用它,這與我面臨的問題有什麼關係?
更新2:這是我點擊Copy exception detail to the clipboard時得到的結果。
我試圖改變的代碼使用TryToUpdateModel()
,並沒有拋出異常,但數據不更新反正
發佈完整的例外和堆棧跟蹤! – 2015-02-06 22:06:59
請發佈來自異常和它的內部異常(如果存在)的消息。錯誤*可能與你的代碼無關,並且與沒有找到的數據庫或表與對象之間的列不匹配有關。 – 2015-02-06 22:21:36
我從'DataException'發佈了一個鏈接到我的堆棧跟蹤,希望這可以幫助我解決問題 – 2015-02-06 22:30:41