保存后EntityFramework一对多虚拟列表为空

时间:2017-07-05 19:56:58

标签: c# entity-framework

我遇到过我在其他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更新:仍然有问题,我发现如果我在将记录添加到文件之后保存,并且在将元素添加到记录之前,它的行为与预期一致,并且元素列表不再被清空。

0 个答案:

没有答案