2016-10-30 4 views
4

データベースに挿入するときに問題はありませんが、更新プロセスを実行すると次の問題が発生します。EF InsertOrUpdate Proble

追加情報:同じタイプの別のエンティティがすでに同じプライマリキー値を持っているため、 'kgSoft_Pro.ORM.Models.StokKarti'タイプのエンティティをアタッチできませんでした。これは、「Attach」メソッドを使用するか、またはグラフ内のエンティティのいずれかが競合するキー値を持つ場合、エンティティの状態を「Unchanged」または「Modified」に設定すると発生します。これは、一部のエンティティが新しく、データベース生成キー値をまだ受け取っていないことが原因です。この場合、 'Add'メソッドまたは 'Added'エンティティ状態を使用してグラフを追跡し、非新規エンティティの状態を 'Unchanged'または 'Modified'に適切に設定します。

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); 
+0

エンティティを解決し、このプロパティは残念ながらありません。 –

+0

'dbContext'はどこから来たのですか?そのライフサイクルは何ですか? –

+0

私はこの問題を解決しました。 [code] dbContext.DbSet ().AddOrUpdate(Entity)[コード] –

答えて

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

問題はフレームワーク6