鑑於實體框架4.0的代碼第一個實體如何在連接到DBContext之前通過屬性單獨檢索EF 4代碼第一個實體的[Key]?
public class MyEntity
{
[Key]
public int MyEntityId { get; set; }
}
有沒有一種方法來檢索不知道屬性的名稱飾以[鍵]屬性的屬性值?
public class KeyReader<TEntity> : where TEntity : class
{
public int GetKeyValue(TEntity entity){
//get key value for entity
}
}
UPDATE
我有一個的DbContext,這樣我就可以使用下面的代碼:
var objectContext = ((IObjectContextAdapter) myContext).ObjectContext;
objectContext.ObjectStateManager.GetObjectStateEntry(entity).EntityKey.EntityKeyValues;
然而,實體後,這僅適用於已添加或連接到的DbContext 。問題是我想使用動態知識的關鍵和它的價值來確定是否應該執行插入或更新,因此是否添加或附加到上下文。在這個代碼變得可能的時候,這太遲了。
我已編輯問題標題以反映此問題。
還有什麼想法?
這是正確的,但看到我的更新,爲什麼這是無助於解決潛在的意圖。無論如何,我都投了贊成票,因爲我很欣賞這個建議。 – 2012-02-15 18:38:58
你*可以*附加它,使用它來獲得鍵值,如果你看到你應該添加它,調用'ObjectStateEntry.ChangeState(EntityState.Added)'。但是,真的,首先做錯了事,檢查你是否做錯了,然後修復它。你接受的答案可能是一個更好的主意。 – hvd 2012-02-15 19:09:44