2016-12-07 88 views
0

我正在嘗試將日誌系統實現到entitiy框架上下文中。 我想刪除其狀態時刪除元素主鍵。 這是我的代碼:將DbEntityEntry附加到上下文

if (item.State == EntityState.Added || item.State == EntityState.Deleted) { 
    log = new dt_islemLog(); 
    log.eskiDeger = null; 
    log.islem = (item.State == EntityState.Added) ? Enums.GetDBValue(Enums.islemDurum.EKLENDI) : Enums.GetDBValue(Enums.islemDurum.SILINDI); 
    log.islemYapanKullanici_id = kullaniciID; 
    log.nesneAd = item.Entity.GetType().Name; 
    log.oturum_id = oturumID; 
    log.zaman = DateTime.Now; 
    base.SaveChanges(); 

    var ID = GetPrimaryKeyValue(item); 
    log.nesneID = ID != null ? ID.ToString() : null; 

    this.dt_islemLog.Add(log); 
} 

這是我得到的主鍵

object GetPrimaryKeyValue(DbEntityEntry entry) { 
    try { 
     if (entry.State == EntityState.Detached) 
      ((IObjectContextAdapter)this).ObjectContext.Attach((System.Data.Entity.Core.Objects.DataClasses.IEntityWithKey)entry.Entity); 

      var objectStateEntry = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity); 
      return objectStateEntry.EntityKey.EntityKeyValues[0].Value; 

    } 
    catch(Exception ex) { 
     return null; 
    } 
} 

的方法,但我不能附加(entry.Entitiy)上下文,因爲投操作無效。我如何獲得主鍵?

回答

0

如果有人需要我找到解決方案。我已經更新了這個主鍵方法

 object GetPrimaryKeyValue(DbEntityEntry entry) 
    { 
     try 
     { 
      if (entry.State == EntityState.Detached) 
       this.Set(entry.Entity.GetType()).Attach(entry.Entity); 

      var objectStateEntry = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity); 
      return objectStateEntry.EntityKey.EntityKeyValues[0].Value; 

     } 
     catch 
     { 

      return null; 
     } 

    }