即使我没有更新id列,System.Data.Entity.Infrastructure.DbUpdateException错误

时间:2017-03-30 08:22:23

标签: c# mysql entity-framework

我正在开发一个项目,我正在使用Entity框架来操作sql server 2014上的数据库。 我的代码如下:

private void BtnAddUser(object sender, EventArgs e)
    {
        var u = new User();
        u.username = txtBoxNewUser.Text;
        u.password = txtBoxNewPass.Text;
        u.rank = cmbBoxRank.GetItemText(this.cmbBoxRank.SelectedItem);
        using (var db = new ProjetPooEntities2())
        {
            db.Users.Add(u);
            db.SaveChanges();
        }

    }

请注意代码运行完美但是当我按下添加按钮将创建的用户添加到数据库时,错误显示在“db.saveChanges()”上,它说:

  

System.Data.Entity.Infrastructure.DbUpdateException:'更新条目时发生错误。有关详细信息,请参阅内部异常。   内在的例外是:   SqlException:当IDENTITY_INSERT设置为OFF时,无法在表'User'中为identity列插入显式值。

我已将db中的标识列设置为“id”,并将其设置为从1开始自动递增1。 我已经尝试了很多寻找解决方案,但我一无所获。 任何帮助将不胜感激!!

2 个答案:

答案 0 :(得分:0)

试试这个:

SET IDENTITY_INSERT sometableWithIdentity ON

答案 1 :(得分:0)

假设User实体具有以下结构:

public class User
{
    public int id { get; set; }
    public string username { get; set; }
    public string password { get; set; }
    public string rank { get; set; }
}

如果使用代码优先,请添加DatabaseGeneratedAttribute选项DatabaseGeneratedOption.Identity,将id设置为身份自动增量属性:

public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int id { get; set; }
    ... // other properties
}

但是,如果使用数据库优先,请打开EDMX模型设计器,使用id字段上的“属性”上下文菜单,并将StoreGeneratedPattern设置为Identity:< / p>

StoreGeneratedPattern.Identity

然后,使用XML编辑器打开EDMX文件并确保它在StoreGeneratedPattern="Identity"属性上有id,如下所示:

<EntityType Name="User">
    <Key>
        <PropertyRef Name="id" />
    </Key>
    <Property Name="id" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
</EntityType>

如果上述方法仍然不起作用,您可以SET IDENTITY_INSERT执行DbContext查询(必须在EDMX中使用StoreGeneratedPattern="None"DatabaseGenerated(DatabaseGeneratedOption.None)还原Code First正常工作):

using (var db = new ProjetPooEntities2())
{
    // taken from /a/31856991
    db.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[User] ON");
    db.Users.Add(u);
    db.SaveChanges();
    db.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[User] OFF");
}

请注意,此处最底层的方法被认为不是一种好的做法,因为在某些情况下可以允许插入重复值。

相关问题:

Cannot insert explicit value for identity column in table 'table' when IDENTITY_INSERT is set to OFF

How can I force entity framework to insert identity columns?