0

我使用 EF4 模型优先方法创建了一个数据库。在我的模型中,两个实体之间存在 N 对 M 关系:

在此处输入图像描述

我已经用一些虚拟数据填充了我的数据库,包括 3 条类型Diagnosis记录和 3 条类型记录TreatmentSchema以及它们之间的关联。这是我用来执行此操作的代码片段:

using(var container = new SmartTherapyContainer()) {
  var diagnosisA = new Diagnosis() { Id = Guid.NewGuid(), Name = "Diagnosis A" };
  var diagnosisB = new Diagnosis() { Id = Guid.NewGuid(), Name = "Diagnosis B" };
  var diagnosisC = new Diagnosis() { Id = Guid.NewGuid(), Name = "Diagnosis C" };
  container.Diagnoses.AddObject(diagnosisA);
  container.Diagnoses.AddObject(diagnosisB);
  container.Diagnoses.AddObject(diagnosisC);

  var schemaA = new TreatmentSchema() { Id = Guid.NewGuid(), Name = "Schema 1" };
  var schemaB = new TreatmentSchema() { Id = Guid.NewGuid(), Name = "Schema 1" };
  var schemaC = new TreatmentSchema() { Id = Guid.NewGuid(), Name = "Schema 1" };
  container.Schemas.AddObject(diagnosisA);
  container.Schemas.AddObject(diagnosisB);
  container.Schemas.AddObject(diagnosisC);

  diagnosisB.TreatmentSchemas.Add(schemaA);
  diagnosisC.TreatmentSchemas.Add(schemaA);
  diagnosisC.TreatmentSchemas.Add(schemaB);
  diagnosisC.TreatmentSchemas.Add(schemaC);

  container.SaveChanges();
}

我验证了关联确实存储在通过 EF4 的映射创建的引用表中。但是,当我稍后Diagnosis通过集合检索 a 时,它的集合始终为空。container.Diagnoses.TreatmentSchemas

我尝试调试 EF4 生成的代码,它所做的只是懒惰地创建所述集合,但它没有用关联的对象填充它。Ayende 的Entity Framework Profiler显示在访问该属性时根本没有生成任何查询,这让我相信我在这里做错了什么。

我怎样才能得到相关的列表TreatmentSchemas

4

1 回答 1

2

默认情况下不加载导航属性。您必须使用预先加载或延迟加载,但因为您使用的是自我跟踪实体,您的选择只是预先加载,因为STE 不支持延迟加载。因此,如果您想获得具有所有相关 TreatmentSchemas 的 Diagonstic 实例,您必须调用:

var diagnosis = context.Diagnoses.Include("TreatmentSchemas").FirstOrDefault();
于 2011-03-19T16:02:31.330 回答