0

次のクエリを見てください。

var user = GetUser(userId);
var sessionInvites = ctx.SessionInvites
    .Include("InvitingUser")
    .Include("InvitedUser")
    .Where(e => e.InvitedUser.UserId == user.UserId)
    .ToList();

var invites = sessionInvites;

// Commenting out the two lines below, and it works as expected.
foreach (var invite in sessionInvites)
    ctx.DeleteObject(invite);

ctx.SaveChanges();

return invites;

これで、ここにあるすべてがエラーなしで実行されます。ユーザーに対して存在する招待は削除され、招待は正常に返されています。

ただし、返された招待のいずれInvitingUserかに移動しようとすると、. 返された SessionIvites の他のすべてのプロパティは正常に動作します。InvitedUserNullReferenceException

どうして?

[編集]奇妙なことに、deleteで行をコメントアウトすると、期待どおりに機能します。(エンティティが削除されないことを除いて:S)

4

2 に答える 2

3

DeleteObject() の副作用の 1 つは、EF が null 可能な FK を null にすることです。その結果、すべての関連付け (InvitingUser/InvitedUser) が失われます。

私の仮定は、あなたの構造はこのようなものです(カーディナリティ)

セッションへの招待

(0-1)FK-> InvitingUser

(0-1)FK-> InvitedUser

結果として。DeleteObject EF を呼び出すと、ナビゲーション プロパティが InvitingUser/InvitedUser に null になります

オブジェクトの削除

于 2010-04-21T12:31:41.613 に答える
0

例外テキストを投稿してください。e.InvitedUserそれはヌル可能ですか?この作品は疑わしいようです:e.InvitedUser.UserId

于 2010-04-21T12:23:33.360 に答える