2016-12-07 3 views
0

私はエンティティフレームワークコンテキストへのログシステムを実装しようとしています。 削除された要素の主キーを、その状態が削除されたときに取得したいです。 これは私のコードです:コンテキストに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; 
     } 

    } 
関連する問題