私は次のクラスの間に2つの1対多の関係があります
public class SiteMember
{
public int SiteMemberID { get; set; }
public virtual List<FriendshipInvitation> InvitationsSent { get; set; }
public virtual List<FriendshipInvitation> InvitationsReceived { get; set; }
}
public class FriendshipInvitation
{
public int InvitingUserID { get; set; }
public SiteMember InvitingUser { get; set; }
public int InvitedUserID { get; set; }
public SiteMember InvitedUser{ get; set; }
}
次に、コントローラーに次のコードがあります(dbから1つのSiteMemberをロードします)。
SiteMember sm = repoSiteMember.GetUserByName(User.Identity.Name);
この時点で、
sm.InvitationsReceived.InvitingUserId = 1;
sm.InvitationsReceived.InvitingUser = null
次に、次の行があります(dbからすべてのSiteMembersをロードします):
IEnumerable<SiteMember> all = repoSiteMember.GetAll();
その後
sm.InvitationsReceived.InvitingUserId = 1
sm.InvitationsReceived.InvitingUser = proxy to SiteMember object.
私の質問は:これは通常の動作ですか?includeステートメントでnullポインターを「修正」できると確信していますが、dbからすべての要素をロードすると、実際にオブジェクトの状態が変わるのは奇妙だと思います。(null =>プロキシ)。プロキシは最初からそこにあるべきですか?
編集: 確認のために、includeステートメントはnull参照の問題を解決しますが、それはここでの問題ではありませんでした。
DataContext.Members
.Include("InvitationsSent.InvitedUser")
.Include("InvitationsReceived.InvitingUser")
.FirstOrDefault(e => e.UserName == userName);
Edit2:メソッドが含まれるようになりました。
public SiteMember GetUserByName(string userName)
{
return base.DataContext.Members.FirstOrDefault(e => e.UserName == userName);
}
public IEnumerable<SiteMember> GetAll()
{
return base.DataContext.Members.ToList();
}
Edit3:モデルを再作成するためにそれが必要になる場合があります。
modelBuilder.Entity<FriendshipInvitation>()
.HasRequired(e => e.InvitedUser)
.WithMany(e => e.InvitationsReceived)
.HasForeignKey(e => e.InvitedUserID)
.WillCascadeOnDelete(false);
modelBuilder.Entity<FriendshipInvitation>()
.HasRequired(e => e.InvitingUser)
.WithMany(e => e.InvitationsSent)
.HasForeignKey(e => e.InvitingUserID);
modelBuilder.Entity<FriendshipInvitation>()
.HasKey(e => new { e.InvitingUserID, e.InvitedUserID, e.InvitationNo });