我正在开发一个项目,我正在使用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。 我已经尝试了很多寻找解决方案,但我一无所获。 任何帮助将不胜感激!!
答案 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>
然后,使用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?