이 쿼리에서보세요 :EntityFramework의 NullReferenceException은 어떻게 생깁니 까?
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)
InvitingUser/InvitedUser는 탐색 속성이며 EF에서는 Nullable로 설정할 수 없습니다. – Mickel
그들은 FK에 묶여 있거나, 기사를 읽거나, 단지 테스트 프로젝트를 생성하는 NAV 프로퍼티입니다. DeleteObject를 호출하면, 그것이 할 수있는 FK를 null로 만듭니다. – Nix
그는 "0 .. * 또는 0..1 카디널리티"를 의미한다고 생각합니다. "nullable"과 같은 의미는 아니지만 아이디어를 얻습니다 ... @Nix는 맞습니다. 관계는 EF에서 일급 주체입니다. 개체를 삭제하면 관계도 그대로 유지됩니다. 상대방에 또 다른 물건이 있다는 것을 기억하십시오. 해당 객체는 삭제 된 객체와 관계를 가질 수 없습니다. –