【发布时间】:2018-08-28 22:16:04
【问题描述】:
我正在尝试从数据库中检索一行,更改其中的某些列值并将其添加为新行(实体框架核心),
但它给了我错误
当 IDENTITY_INSERT 设置为 OFF 时,无法为表“Audit_Schedules”中的标识列插入显式值。
这个表有一个主键"ScheduleId"
下面是我的代码
AuditSchedules _schedules = new AuditSchedules();
using (var ctx = new QuestionnaireEntities(_configuration))
{
_schedules = ctx.AuditSchedules.Where(x => x.ScheduleId == model.ScheduleID).SingleOrDefault();
_schedules.StaffId = model.TransferedAuditorCode;
_schedules.StaffName = model.TransferedAuditorName;
_schedules.FromDate = _schedules.ToDate = Convert.ToDateTime(model.TransferedScheduleDate);
ctx.AuditSchedules.Add(_schedules);
ctx.SaveChanges();
_subschedules = ctx.AuditSubSchedule.Where(x => x.SubScheduleId == model.SubScheduleID).SingleOrDefault();
_subschedules.IsHoliDay = "Y";
_subschedules.HolidayType = model.HolidayType;
_subschedules.TransferedScheduleId = _schedules.ScheduleId.ToString();
ctx.AuditSubSchedule.Update(_subschedules);
ctx.SaveChanges();
}
错误出现
ctx.AuditSchedules.Add(_schedules);
首先我认为它的 Schedule_ID 值冲突并且无法添加重复的 Primary Key ,但是 Schedule_ID 是自动生成的字段,因此不应该发生此问题
我也尝试将其设置为不同的值
_schedules.ScheduleId = 0;
但它不插入 . 如何复制其中几乎没有更改的行(想要添加新行但修改了值)
【问题讨论】:
-
创建一个新对象并复制更多字段要干净得多。此外,您的 SingleOrDefault() 应该只是 Single() 。
-
错误已经很清楚了,需要清除两个表的PK。
-
您没有告诉 EF
ScheduleId是一个标识列,因此它会尝试向其中插入一个值。 -
@GertArnold ,比我们使用 Add() 方法时 SQL 如何生成它的值,
-
您知道什么是身份列,对吗?任何插入都会生成下一个值。
Schedule_ID不应该出现在 EF 生成的插入语句中,这才是重点。
标签: c# entity-framework-6 entity-framework-core