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;

现在,这里的一切都执行没有任何错误。正在删除为用户存在的邀请,并且成功返回邀请。

但是,当我尝试导航到任一返回的邀请InvitingUserInvitedUser任何返回的邀请时,我得到NullReferenceException. 返回的 SessionIvites 的所有其他属性都可以正常工作。

怎么会?

[编辑]现在奇怪的是,如果我用 delete 注释掉这些行,它会按预期工作。(除了实体不会被删除:S)

4

2 回答 2

3

DeleteObject() 的副作用之一是 EF 将使任何可以为空的 FK 为空,因此您的所有关联(InvitingUser/InvitedUser)都消失了。

我的假设是你的结构是这样的(基数)

会议邀请

(0-1)FK-> InvitingUser

(0-1)FK-> InvitedUser

因此。当您调用 DeleteObject 时,EF 会将您的导航属性设为 InvitingUser/InvitedUser

删除对象

于 2010-04-21T12:31:41.613 回答
0

请张贴例外文本。e.InvitedUser它可以为空吗?这件作品看起来很可疑:e.InvitedUser.UserId

于 2010-04-21T12:23:33.360 回答