我有以下代码将成员添加到父组。我遇到的问题是添加到PCSGroupMembers集合的LAST成员不会按需加载它的导航属性。我有一套3我尝试添加各种订单...前2个总是有效,最后一个不能加载导航属性。
在下面的情况中,您将看到总共6个成员。最后3个是我刚刚在这个请求中添加的是相同的IDS作为前3个(唯一的键是groupid,memberid,startdate),所以我肯定不知道"坏FK"或类似的。前两个新成员正在构建他们的导航属性,但最后一个永远不会。如果我添加2,3,4等等并不重要。最后一个永远不会填充。
对我来说真的很奇怪的是PcsGroupID
在最后一个上是一个空的Guid,即使它已经通过下面的代码中的group.PcsGroupMembers.add(pcsMember)
添加到了组中。
编辑:如果您看到标有 Hack 的块,则真正的最终成员现在拥有它的导航属性。然后从集合(和上下文)中删除伪造的临时成员,一切都神奇地起作用。所以.... WAT?
添加新成员的代码
//expire all existing members ([0..2] in this example)
group.PCSGroupMembers
.Where(m => m.EndDate == null)
.ToList().ForEach(m => {
m.EndDate = DateTime.Now.Date;
});
//add new members from request ([3..5] in this example)
foreach (PcsGroupMemberAddViewModel member in requestViewModel.Members) {
PCSGroupMember pcsMember = db.PCSGroupMembers.Create();
pcsMember.PCSSplitID = Guid.NewGuid();
pcsMember.ProjectProtocolID = member.ProjectProtocolID;
pcsMember.SplitAmount = member.Split;
pcsMember.IsPrimary = member.IsPrimary;
pcsMember.StartDate = DateTime.Now.Date;
group.PCSGroupMembers.Add(pcsMember);
}
哈克
var tempmember = db.PCSGroupMembers.Create();
//this Add seems to trigger the previous 'real' item to load it's Nav properties.... ???
group.PCSGroupMembers.Add(tempmember);
group.PCSGroupMembers.Remove(tempmember); //remove from collection
db.PCSGroupMembers.Remove(tempmember); //remove from context