我使用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
集合检索container.Diagnoses
时,其.TreatmentSchemas
集合始终为空。
我尝试调试EF4生成的代码,它所做的只是懒惰地创建所述集合,但它没有用相关对象填充它。 Ayende的实体框架分析器显示在访问该属性时根本没有生成任何查询,这使我相信我在这里做错了。
如何获取关联的TreatmentSchemas
?
答案 0 :(得分:2)
默认情况下不加载导航属性。您必须使用预先加载或延迟加载,但因为您使用的是自我跟踪实体,您的选择只是急切加载,因为STEs don't support lazy loading。因此,如果您想获得所有相关TreatmentSchemas的Diagonstic实例,您必须致电:
var diagnosis = context.Diagnoses.Include("TreatmentSchemas").FirstOrDefault();