2012-02-02 44 views
0

我一直在嘗試使用TryGetObjectByKey找到依據上下文新增實體:EF4是否總是使用臨時密鑰來添加新實體?

Dim ObjectFound As Boolean = Context.TryGetObjectByKey(entityKey, obj) 

我發現TryGetObjectByKey總是失敗,即使我知道,實體我一直在尋找已被添加到上下文。有問題的實體使用的電子郵件地址作爲主鍵,並通過構造函數的實體(它不是由DB生成的)提供的email地址:

Public Class Customer 
    Private _email as string 

    Public Sub New (Email as string) 
     'Email is the primary key in the DB and the entity key in EF4. 
     'It is not generated by the DB. 
     _email = Email 
    End Sub 

End Class 

經過進一步調查,我發現了EntityKeys爲所有添加的實體都沒有值,並且它們的IsTemporary標誌被設置爲true。 TryGetObjectByKey失敗,因爲添加對象的EntityKey尚未設置。

我最初的印象是EntityKey會在調用AddObject時立即生成,如果EntityKey不是由DB生成的。所以,有兩個問題:

1)我應該期望所有新添加的實體都有臨時的EntityKeys嗎?

2)如果#1爲真,我如何通過主鍵找到新增的實體?

回答

0

MSDN狀態以下:

新對象添加到ObjectContext的通過調用上的ObjectContext或對象集的 AddObject方法或通過在「多」添加對象 到對象的集合關係的結束。

此時,實體框架會生成一個臨時密鑰,其中 用於將對象存儲在ObjectStateManager中。

只有在SaveChanges(和相應的Insert語句)之後創建了一個EntityKey。

相關問題