EF InsertOrUpdate问题

时间:2016-10-30 18:41:41

标签: c# entity-framework

插入数据库时​​没有任何问题,但是当我执行更新过程时,会出现以下问题。

  

其他信息:附加类型为' kgSoft_Pro.ORM.Models.StokKarti'的实体。失败,因为同一类型的另一个实体已具有相同的主键值。使用'附加'方法或将实体的状态设置为“未更改”#39;或者'修改'如果图中的任何实体具有冲突的键值。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在这种情况下,请使用'添加'方法或“添加”#39;实体状态跟踪图形,然后将非新实体的状态设置为“未更改”。或者'修改'酌情。

AddOrUpdate代码

public int InsertOrUpdate(T Entity) 
{
    var type = Entity.GetType();
    var property = type.GetProperty("id");
    var propValue = (int)property.GetValue(Entity);
    dbContext.Entry(Entity).State = propValue > 0 ? EntityState.Modified : EntityState.Added;
    return Save();
}

保存代码

StokKarti stok = new StokKarti();
stok.Adi = txtStokAdi.Text;
stok.AlisFiyati = decimal.Parse(clcAlisFiyati.EditValue.ToString());
stok.StokKodu = btnStokKodu.EditValue.ToString();
stok.Barkod = txtBarkod.Text;
stok.DigerSatis = decimal.Parse(clcDigerFiyat.EditValue.ToString());
stok.GrupKod = lkGrupKodlari.EditValue.ToString();
stok.hizlisatis = chkSatisEkrani.Checked;
stok.PerakendeSatis = decimal.Parse(clcPerakende.EditValue.ToString());
stok.ToptanSatis =decimal.Parse(clcToptanFiyat.EditValue.ToString());
stok.RiskLimiti = (int?)txtRiskLimiti.EditValue ?? 0;
stok.KdvOrani = (int)lkKdvOran.EditValue;
stok.Birim = lkBirim.EditValue.ToString();
stok.Marka = lkMarkasi.EditValue.ToString();
stok.id = id;
sk.InsertOrUpdate(stok);

1 个答案:

答案 0 :(得分:3)

dbContext.DbSet<T>().AddOrUpdate(Entity)

问题解决了