我尝试添加实体时实体框架中的InnerException

Cri*_*jon 2 c# entity-relationship entity-framework visual-studio-2010

我正在尝试使用Entity Framework将实体插入到我的数据库中.见下文:

private void InsertarIntoDataBase()
{

    Juego game = db.games.First(g => g.Id == anId);
    Day d = new Day {
                       DayNumber = this.Number,
                       Game = game // This is a relationship. One Day has one game 
                    };
    db.AddToDay(d);
    db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

这始终是插入,而不是更新.我第一次运行我的应用程序,它工作,之后它停止工作,抛出此异常An error occurred while updating the entries. See the InnerException for details..(我确信我没有改变任何事情).

为什么框架认为我正在更新?我错了什么?

Dav*_*son 8

SaveChangesSystem.Data.Entity.Infrastructure.DbUpdateException如果你的更新命令失败,它将抛出一个,它包装了一个System.Data.UpdateException最终包装的System.Data.SqlClient.SqlException.同样重要的是要注意,内部 - 内部异常可能不是SqlException取决于您正在使用的实体框架提供程序.

如果您打开这些内容,可以使用原始SqlError对象来提供有关更新问题的特定详细信息.

try 
{
    db.SaveChanges();
}
catch (DbUpdateException ex) 
{
    UpdateException updateException = (UpdateException)ex.InnerException;
    SqlException sqlException = (SqlException)updateException.InnerException;

    foreach (SqlError error in sqlException.Errors)
    {
        // TODO: Do something with your errors
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以通过捕获System.Data.Entity.Validation.DbEntityValidationException来获取大量功能和控制权,这将显示调用期间发生的任何验证错误SaveChanges.默认行为是验证保存时的更改.您还可以通过调用预先验证更改DbContext.GetValidationErrors().