DataBase First 基础(四) 删除或修改表时失败,因为相同类型的其他实体已具有相同的主键值***

一、删除操作、错误信息

删除操作:

          #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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值