首页 / C# / c#-在实体框架核心中复制整个行
c#-在实体框架核心中复制整个行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-在实体框架核心中复制整个行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2034字,纯文字阅读大概需要3分钟。
内容图文
![c#-在实体框架核心中复制整个行](/upload/InfoBanner/zyjiaocheng/686/1b1eb08c389b49969defc7838722f7bf.jpg)
我试图从数据库中检索一行,更改其中的某些列值,并将其添加为新行(Entity Framework Core),
但这给了我错误
Cannot insert explicit value for identity column in table ‘Audit_Schedules’ when IDENTITY_INSERT is set to OFF.
该表具有主键“ 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值冲突并且无法添加重复的主键,但是Schedule_ID是自动生成的字段,因此不应发生此问题
我也尝试将其设置为其他值
_schedules.ScheduleId = 0;
但不会插入.
如何复制行中几乎没有更改的行(想添加新行但修改值)
解决方法:
带有插入时自动生成的值的EF核心行为不同于EF6.
首先,该属性必须具有默认值(0)才能自动生成.这允许插入身份,这在EF6中是不可能的.
其次,上下文不应跟踪要添加的实体,因为否则上下文将在内部保留一些信息,表明已设置了实体密钥,并将在生成的INSERT命令中包含值(甚至为0),这反过来会导致你得到的例外.
为了实现该目标,在调用Add方法之前:
首先,请确保在获取实体时未使用No-tracking query对其进行跟踪
_schedules = ctx.AuditSchedules
.AsNoTracking() // <--
.Where(x => x.ScheduleId == model.ScheduleID)
.SingleOrDefault();
或明确分离
ctx.Entry(_schedules).State = EntityState.Detached;
然后重置PK
_schedules.ScheduleId = 0;
做其他修改,最后调用
ctx.AuditSchedules.Add(_schedules);
这将适用于没有导航属性/ FK的简单实体.对于复杂的实体图,您应该不使用跟踪查询,然后以与分离的实体图相同的方式使用它.
内容总结
以上是互联网集市为您收集整理的c#-在实体框架核心中复制整个行全部内容,希望文章能够帮你解决c#-在实体框架核心中复制整个行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。