第二次更新尝试后,EF会抛出异常

时间:2017-12-10 12:50:16

标签: c# entity-framework

有一个更新方法抛出异常,但它在第二次尝试抛出异常消息后首次登录时工作正常; **

  

附加信息:附加类型的实体   ' Hsys.InfluenzaTaniBilgisi'失败,因为另一个实体相同   type已经具有相同的主键值。这可能发生在   使用'附加'方法或将实体的状态设置为   '不变'或者'修改'如果图中有任何实体   冲突的关键值。这可能是因为一些实体是新的和   尚未收到数据库生成的键值。在这种情况下使用   '添加'方法或“添加”#39;实体状态跟踪图形和   然后将非新实体的状态设置为“未更改”#39;或者'修改'如   合适的。

** 我知道它的共同点,并发现许多微笑的问题,但我无法使它工作..

这是代码片段;

public void CreateUpdateInfluenzaTani(InfluenzaTaniBilgisi taniBilgisi)
            {
                using (HsysDbContext con = new HsysDbContext())
                {

                    if (con.InfluenzaTestTanilari.Any(x => x.ICD10TaniKodu == taniBilgisi.ICD10Kodu && x.IsDeleted != true))
                    {
                        var taniExist = con.InfluenzaTaniBilgisi.FirstOrDefault(x => x.MuayeneId == taniBilgisi.MuayeneId && x.ICD10K

odu == taniBilgisi.ICD10Kodu && x.IsDeleted != true);
                        if (taniExist == null)
                        {
                            taniBilgisi.ObjectState = Framework.Entities.ObjectState.Added;
                            Create(taniBilgisi);
                        }
                        else
                        {
                            taniExist.HastaYasi = taniBilgisi.HastaYasi;
                            taniExist.HekimTC = taniBilgisi.HekimTC;
                            taniExist.ObjectState = Framework.Entities.ObjectState.Modified;
                            Update(taniExist);// throws Exception!
                        }
                    }
                }
            }

1 个答案:

答案 0 :(得分:1)

 taniExist.ObjectState = Framework.Entities.ObjectState.Modified;

这是你的问题。

您无法在现有密钥上使用Framework.Entities.ObjectState.Modified; 实体框架工作将不允许

您需要先执行此操作:

taniExist.ObjectState = Framework.Entities.ObjectState.Added;

然后:

  taniExist.ObjectState = Framework.Entities.ObjectState.Modified;

您的代码如下所示:

      taniExist.HastaYasi = taniBilgisi.HastaYasi;
                            taniExist.HekimTC = taniBilgisi.HekimTC;
                            taniExist.ObjectState = Framework.Entities.ObjectState.Added;
                            Update(taniExist);
Framework.Entities.ObjectState.Modified;