は、以下の(非常に単純化された)エンティティを考えてみましょう:私のマッパーでEntity Frameworkの遅延ロード間違ったエンティティ
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Answer
{
public int Id { get;set; }
public virtual User User { get; set; }
public string Text { get;set }
}
public class TeamMember
{
public int Id { get;set; }
public virtual User User { get; set; }
public string Role { get; set; }
}
変更が永続化される前に、私は(とすぐに次のコードが実行されると、ユーザーの罰金を設定することができますが、 teamMembersはTeamMembersのリストであり、あるCurrentUserは、DBからロードされたユーザエンティティである
if (teamMembers.Select(x => x.User).Contains(currentUser))
)DBには、回答のユーザプロパティは、データベースから以前の値に設定されています。 データベースからまだロードされていない前に、私はAnswerのUserプロパティにアクセスしていないので、これは何が起こっているのか(遅れて読み込まれていますか?)
マッパーで設定する前にユーザーを読むことで問題を解決できますが、私が理解できないのはTeamMemberのユーザープロパティにアクセスすると、回答のユーザープロパティが読み込まれて設定される理由です。両方のエンティティが同じユーザー(つまり、外部キーと同じUser_Idを持っているデータベース)に関連付けられているため、これは予想される動作ですか?TeamMembersに読み込むとき、EFはそれを参照する他のエンティティを巧みに読み込み、まだロードされていませんか?
おかげで、それは完全に私の質問に答える(おそらく十分に明確ではありませんでした)しません。 User1 {}とUser2 {}の2人のユーザーがいるとしましょう。私は 'User1 {}'から 'User2 {}'に 'answer.User'の値を設定し、次にsaveを保存せずにselect(例:' teamMembers.Select(x => x) .User).Contains(currentUser) ')を私のteamMembersコレクションに追加すると、私の答えのUserプロパティが' User1 {} 'に戻ります。 – msokrates
User2はすでにデータベースに保存されていますか、その時点では「メモリ内」ですか? –
Answer.UserをUser2に設定しましたが、データベースから取得しましたが、この変更はまだ保存されていません。 – msokrates