db.SaveChanges()导致EntityFramework.dll中出现System.Data.Entity.Infrastructure.DbUpdateException'

时间:2016-11-17 19:00:47

标签: c# asp.net asp.net-mvc entity-framework

我正在尝试将一个房间添加到我的数据库中,但不断收到上述错误并且无法找出原因。

我想插入:

ID:12345 名称:房间

数据库中没有ID为12345的条目,实际上没有条目,我无法插入任何内容。

模型

public class Room
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ID { get; set; }

    public string name { get; set; }

    public virtual ICollection<RoomItem> RoomItems { get; set; }
    public virtual ICollection<StaffRoom> StaffRooms { get; set; }
    public virtual ICollection<RoomAudit> RoomAudit { get; set; }
}

控制器

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID, name")] Room room)
{

    db.Rooms.Add(room);
    db.SaveChanges();
    return RedirectToAction("Index");

}

连接字符串

<connectionStrings>
  <add name="UniversityContext" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=RoomAudit;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>

我一直在努力解决这个问题几个小时,所以任何帮助都会得到大力赞赏。

修改

完整错误:

EntityFramework.dll中发生了'System.Data.Entity.Infrastructure.DbUpdateException'类型的异常,但未在用户代码中处理

其他信息:更新条目时发生错误。有关详细信息,请参阅内部异常。

内部异常1:

{“更新条目时发生错误。有关详细信息,请参阅内部异常。”}

内部异常2:

{“当IDENTITY_INSERT设置为OFF时,无法在表'Room'中为标识列插入显式值。”}

1 个答案:

答案 0 :(得分:1)

问题如下:

  

无法在表'Room'中为identity列插入显式值   IDENTITY_INSERT设置为OFF

ID是一个标识列,您尝试使用insert来设置此值。一个快速的解决方法是更改​​列并删除标识。但是,我不确定这是否是适合您案例的最合适的设计解决方案。通常,主键被定义为自动递增(标识列)整数值。但是,这不是您应该始终遵循它的规则。这取决于我之前所说的设计选择。