我遇到过我在其他EF项目中没有看到过的奇怪行为。特别是项目有3个班级;文件,记录和元素。首先我从Context中提取文件,然后将Records添加到File中,然后我将Elements添加到Record中,然后保存。非常基本的东西吧?
但是,保存后,Record.Elements为空; 16之前保存和0之后。元素被保存到数据库中,它只是被清空的虚拟列表。
同样奇怪的是,如果我查询元素,请回来(见下文)。
如果重要的话,我确实有LazyLoadingEnabled = true。
public class File
{
public int Id{get;set;}
public virtual List<Records> Records{get;set;}
}
public class Record
{
public int FileId{get;set;}
public int Id{get;set;}
[ForeignKey("FileId")]
public virtual File File{get;set;
public virtual List<Element> Elements{get;set;}
}
public class Element
{
[ForeignKey("Record")]
public int FileId{get;set;}
[ForeignKey("Record")]
public int RecordId{get;set;}
public string ElementName{get;set;}
public virtual Record Record{get;set;}
}
因此,这是我的代码流,以及Record.Elements
的结果void DoStuff(DbContext context, int fileId)
{
var file = context.Files.FirstOrDefault(file=>file.Id = fileId);
Record record;
file.Records.Add(record = new Record{
File = file,
...
});
for (var i = 0;i < 17; i++)
{
record.Elements.Add(new Element{
Record = record,
...
});
}
// Record.Elements.Count = 16
context.SaveChanges();
// Record.Elements.Count = 0
var elements = Current.Context.FileElements.Where(e => e.RecordId == fileRecord.Id).ToList();
// Record.Elements.Count = 16 again (with the lazy loading string from hell)
}
我需要弄清楚为什么列表被清空,因为没有元素我的类是无用的,并且执行该查询我觉得不应该是必要的。我不明白发生了什么。
** 7/6更新:仍然有问题,我发现如果我在将记录添加到文件之后保存,并且在将元素添加到记录之前,它的行为与预期一致,并且元素列表不再被清空。