2012-02-02 13 views
0

EF4は、新しく追加されたエンティティには常に一時キーを使用しますか?私はTryGetObjectByKeyを使用してコンテキストに新しく追加されたエンティティを見つけようとしてきた

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

私は私が探していたエンティティがコンテキストに追加されていたことを知っていた場合でも、TryGetObjectByKeyは常に失敗したことがわかりました。問題のエンティティが主キーとして電子メールアドレスを使用し、そのメールアドレスは、(それがDBによって生成されていない)エンティティのコンストラクタを介して提供されています

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に設定されていました。追加されたオブジェクトのEntityKeyがまだ設定されていないため、TryGetObjectByKeyが失敗しました。

私は元々、EntityKeyがDBによって生成されなかった場合にAddObjectを呼び出すとすぐにEntityKeyが生成されるという印象を受けました。したがって、2つの質問:

1)新しく追加されたすべてのエンティティに一時的なEntityKeysがあると期待する必要がありますか?

2)#1が真である場合、主キーで新しく追加されたエンティティを見つけるにはどうすればよいですか?次

答えて

0

MSDN状態:

新しいオブジェクトがObjectContextをするのいずれかのObjectContextまたはobjectSetとの AddObjectメソッドを呼び出すか、「多くの」上のオブジェクトのコレクションにオブジェクト を追加することによって追加されます関係の終わり。

この時点で、Entity Frameworkは一時キーを生成します。 は、オブジェクトをObjectStateManagerに格納するために使用されます。

SaveChanges(および対応するInsertステートメント)の後でのみ、EntityKeyが作成されます。

関連する問題