一、删除操作、错误信息
删除操作:
#region 遍历,删除
foreach (PatientInfoHistroryModel patient in deletePatients)
{
//PatientInfo_Table deletePatientInfoTable = new PatientInfo_Table()
//{
// PatientKey = Convert.ToInt64(patient.PatientInfo),
// PatientID = patient.StudyID,
// PatientName = patient.PatientName,
// PatientSex = patient.PatientSex,
// PatientAge = patient.PatientAge,
// PatientBirthDate = Convert.ToDateTime(patient.PatientBrith),
// PatientWeight = Convert.ToInt64(patient.PatientWeight),
// PatientHeight = Convert.ToInt64(patient.PatientHeight),
// PatientSize = Convert.ToInt64(patient.PatientSize),
// PatientSource = Convert.ToInt64(patient.RecordSource),
// PrintFlag = Convert.ToInt64(patient.FilmPrint),
// StudyCompleteFlag = Convert.ToInt64(patient.StudyStutas),
// HangFlag = Convert.ToInt64(patient.SuspendState),
// PatientArchiveFlag = Convert.ToInt64(patient.PatientArchiveFlag),
//};
PatientInfo_Table deletePatientInfoTable = new PatientInfo_Table();
deletePatientInfoTable.PatientKey = Convert.ToInt64(patient.PatientInfo);
dataBase.Entry<PatientInfo_Table>(deletePatientInfoTable).State = System.Data.Entity.EntityState.Deleted;
}
错误信息:
******因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为。这可能是因为某些实体是新的并且尚未接收数据库生成的键值。在此情况下,使用 "Add" 方法或者 "Added" 实体状态跟踪该图形,然后将非新实体的状态相应设置为 "Unchanged" 或 "Modified"。
二、错误原因
修改更新数据到数据库有两种方式:连接模式下和断开模式下,出现问题的原因在因为连接模式,同一个上下文要缓存了两个同一个主键的对象,EF的上下文不允许这种情况出现。如果我再new一次PatientInfo_Table,放一个new的实体进去跟踪.他会有2个相同ID的对象,然后就报异常了。
三、解决办法
针对上述问题的,解决办法:
方法1:dataBase.Dispose();
https://q.cnblogs.com/q/69905/(可以先断开连接数据)
方法2:attach、AsNoTracking
https://www.cnblogs.com/godbell/p/7360739.html
https://blog.csdn.net/sxf359/article/details/72673870
https://www.cnblogs.com/Amyn/p/6250481.html