【发布时间】:2018-05-27 03:59:06
【问题描述】:
在创建并保存客户后,我正在使用此方法为每个“客户”创建一组子对象:
public List<ListTnc> GetNewTncs()
{
List <ListTnc> listTncs = new List<ListTnc>();
List<SuppressionVariant> variants = SuppressionVariants.ToList();
foreach (var suppressionList in SuppressionLists.Where(sl => sl.RequireTnc))
{
if (variants.Any(d => d.ListName == suppressionList.ListName))
{
listTncs.Add(new ListTnc { SuppressionListId = variants.Where(d => d.ListName == suppressionList.ListName)
.FirstOrDefault().SuppressionListId });
}
else
{
listTncs.Add(new ListTnc { SuppressionListId = suppressionList.SuppressionListId });
}
}
return listTncs;
}
这工作正常,并返回预期的数据 - ListTnc 对象列表,其中仅填充了它们的 SuppressionListId。在if 语句的上半部分或下半部分添加的对象之间没有区别。我这样调用它:
if (model.ListTncs == null || model.ListTncs.Count == 0)
{
model.ListTncs = GetNewTncs();
}
再一次,这似乎很好。奇怪的是,当我保存它时:
Rep.UpdateAndSave(model);
public void UpdateAndSave<T>(T updateItem) where T : class
{
Update(updateItem);
SaveChanges();
}
此时数据保存在数据库中,我可以查询它,使用JOIN 语句链接到Customer 和SuppressionList 表,它看起来很好 - 所有数据都符合预期。
但是在 C# 代码中,在 else 语句中填充的任何 ListTnc 对象都具有完整的对象图,但在 if 语句中填充的对象缺少其链接的 SuppressionList 对象。这会导致视图出错。
如果我重新加载页面,它会获取完整的对象图,一切都很好。为什么 Save 语句不会导致所有子对象都填充其对象图?
【问题讨论】:
标签: c# entity-framework