有一个更新方法抛出异常,但它在第二次尝试抛出异常消息后首次登录时工作正常; **
附加信息:附加类型的实体 ' 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!
}
}
}
}
答案 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;