【发布时间】:2015-05-23 13:49:25
【问题描述】:
在控制器中构建一个对象并将其保存到数据库中。 在同一个控制器操作中,我创建了另一个不同类型的对象并将其保存(Class SecondType 还包含一个 ID):
cDb.SecondType.Add(new SecondType { Designation = "test" });
cDb.SaveChanges();
这行得通。在查看索引(我使用脚手架选项创建了经典的创建、删除、...视图)或详细视图时,我可以看到这个对象,我也可以修改它。但是,如果我点击删除,它会显示我必须确认删除的第一个视图,并且在按下提交按钮后它会返回一个 DbUpdateException,而在 SaveChanges 命令中没有任何进一步的信息:
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
SecondType secondType = db.SecondTypes.Find(id);
db.SecondTypes.Remove(secondType);
db.SaveChanges();
return RedirectToAction("Index");
}
我不知道为什么会发生这种情况,如果您有任何解决此问题的想法,我将非常感谢。
这是我可以复制的:
System.Data.Entity.Infrastructure.DbUpdateException ist aufgetreten.
HResult=-2146233087
Message=Fehler beim Aktualisieren der Einträge (= Error while updating the entries). Weitere Informationen finden Sie in der internen Ausnahme.
Source=EntityFramework
StackTrace:
bei System.Data.Entity.Internal.InternalContext.SaveChanges()
bei System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
bei System.Data.Entity.DbContext.SaveChanges()
bei Irgendwas.Controllers.SecondTypeController.DeleteConfirmed(Int32 id) in c:\Users\username\Documents\Visual Studio 2012\Projects\Irgendwas\Irgendwas\Irgendwas\Controllers\SecondTypeController.cs:Zeile 113.
InnerException: System.Data.UpdateException
HResult=-2146233087
Message=Fehler beim Aktualisieren der Einträge. Weitere Informationen finden Sie in der internen Ausnahme.
Source=System.Data.Entity
StackTrace:
bei System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
bei System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
bei System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
bei System.Data.Entity.Internal.InternalContext.SaveChanges()
InnerException: System.Data.SqlClient.SqlException
HResult=-2146232060
Message=Die DELETE-Anweisung steht in Konflikt mit der REFERENCE-Einschränkung 'FK_dbo.ThirdTypes_dbo.Second_SecondType_ID'. Der Konflikt trat in der 'Irgendwas.Models.SecondTypeContext'-Datenbank, Tabelle 'dbo.ThirdTypes', column 'SecondType_ID' auf.
Die Anweisung wurde beendet.
Source=.Net SqlClient Data Provider
ErrorCode=-2146232060
Class=16
LineNumber=1
Number=547
Procedure=""
Server=.\SQLEXPRESS
State=0
StackTrace:
bei System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
bei System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
bei System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
bei System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
bei System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
bei System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
bei System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
bei System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
bei System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
bei System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
bei System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
InnerException:
【问题讨论】:
-
DbUpdateException 是否设置了 InnerException 属性?如果是这样,它说明了什么?
-
这篇文章概述了捕获 DbUpdateException stackoverflow.com/questions/22490842/… 的好方法
-
如何查看属性是否设置以及它的内容是什么
标签: c# asp.net-mvc entity-framework