Database 如何正确使用EF4导航属性?
我已经使用EF4 model first方法创建了一个数据库。在我的模型中,两个实体之间存在N-to-M关系: 我已经用一些虚拟数据填充了我的数据库,包括3条Database 如何正确使用EF4导航属性?,database,entity-framework,entity-framework-4,associations,self-tracking-entities,Database,Entity Framework,Entity Framework 4,Associations,Self Tracking Entities,我已经使用EF4 model first方法创建了一个数据库。在我的模型中,两个实体之间存在N-to-M关系: 我已经用一些虚拟数据填充了我的数据库,包括3条Diagnosis类型的记录和3条TreatmentSchema类型的记录以及它们之间的关联。下面是我用来执行此操作的代码片段: using(var container = new SmartTherapyContainer()) { var diagnosisA = new Diagnosis() { Id = Guid.NewGu
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映射创建的引用表中。但是,当我稍后通过容器.diagnostics
集合检索诊断时,其.TreatmentSchemas
集合始终为空
我试着调试EF4生成的代码,它所做的只是懒洋洋地创建所说的集合,但并没有用关联的对象填充它。Ayende的Entity Framework Profiler显示在访问属性时根本没有生成任何查询,这让我相信我在这里做错了什么
如何获取关联的处理模式列表?默认情况下不加载导航属性。您必须使用即时加载或延迟加载,但因为您使用的是自跟踪实体,所以您只能选择即时加载,因为。因此,如果您想获得包含所有相关处理模式的Diagnostic实例,必须调用:
var diagnosis = context.Diagnoses.Include("TreatmentSchemas").FirstOrDefault();
如果相关,我将使用“自跟踪实体生成器”为我的EF4模型生成代码。谢谢!在字符串中向下引用表名有点不利于重构,也许我可以通过向服务中添加显式方法来解决这个问题。很高兴知道这个限制,这会让我以后有些头疼:)如果您不喜欢使用带有导航属性名称chech EF 4.1的Include,因为它有带有lambdas的强类型版本。