我正在尝试使用EntityFramework更新表行,不更改代码中的ID列。为什么仍然告诉我无法插入显式值?
当IDENTITY_INSERT设置为OFF时,无法在表'tblLicenseGroups'中为标识列插入显式值。
我的密码
//mytbl context is initialized as _gc
var mymodel=_gc.mytbl.Where(x=>x.ID.ToString()=="1").FirstorDefault();
mymodel.otherfield=22;//sets a new value
_gc.Add(mymodel);
_gc.SaveChanges();
EF模型
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public int otherfield { get; set; }
SQL创建
CREATE TABLE [dbo].[tblLicenseGroups](
[ID] [int] IDENTITY(1,1) NOT NULL,
....
CONSTRAINT [PK_tblSiteParentIDs] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
答案 0 :(得分:2)
如果您使用相同的DbContext实例检索并修改了模型,则无需调用Add
方法,只需调用.SaveChanges()
由于EF会跟踪您对数据库中的对象所做的更改,因此更新部分会自动发生。
答案 1 :(得分:0)
您正在选择现有记录,然后尝试再次添加。
您收到的错误可能是因为您的数据库中有一个identity
字段,而代码中有[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
则表明这是事实。
您可能想尝试一些能够影响以下方面的事情:
var mymodel=_gc.mytbl.Where(x=>x.ID.ToString()=="1").FirstorDefault();
mymodel.ID = 0;
_gc.Add(mymodel);
_gc.SaveChanges();
上面的代码旨在将模型注册为自身的新版本,这应该向数据库表中添加一条与ID完全相同的新记录
希望这会有所帮助