NullReferenceException в EntityFramework, как получилось? - PullRequest
0 голосов
/ 21 апреля 2010

Посмотрите на этот запрос:

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 или InvitedUser на любом из возвращенных приглашений, я получаю NullReferenceException. Все остальные свойства SessionIvites возвращены, отлично работает.

Как получилось?

[РЕДАКТИРОВАТЬ] Теперь странная вещь, если я закомментирую строки с удалением, это работает как ожидалось. (За исключением того, что объекты не будут удалены: S)

Ответы [ 2 ]

3 голосов
/ 21 апреля 2010

Одним из побочных эффектов DeleteObject () является то, что EF обнулит любой FK, который может обнуляться, в результате все ваши ассоциации (InvitingUser / InvitedUser) исчезнут.

Я предполагаю, что ваша структура такая (кардинальность)

SessionInvites

(0-1) FK-> InvitingUser

(0-1) FK-> InvitedUser

В результате. Когда вы вызываете DeleteObject EF, ваши свойства наивелирования обнуляются в InvitingUser / InvitedUser

Удаление объектов

0 голосов
/ 21 апреля 2010

пожалуйста, публикуйте тексты исключений. e.InvitedUser это обнуляемый? этот кусок выглядит подозрительно: e.InvitedUser.UserId

...