Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何正确使用EF4导航属性?_Database_Entity Framework_Entity Framework 4_Associations_Self Tracking Entities - Fatal编程技术网

Database 如何正确使用EF4导航属性?

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

我已经使用EF4 model first方法创建了一个数据库。在我的模型中,两个实体之间存在N-to-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映射创建的引用表中。但是,当我稍后通过
容器.diagnostics
集合检索
诊断时,其
.TreatmentSchemas
集合始终为空

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


如何获取关联的
处理模式列表?

默认情况下不加载导航属性。您必须使用即时加载或延迟加载,但因为您使用的是自跟踪实体,所以您只能选择即时加载,因为。因此,如果您想获得包含所有相关处理模式的Diagnostic实例,必须调用:

var diagnosis = context.Diagnoses.Include("TreatmentSchemas").FirstOrDefault();

如果相关,我将使用“自跟踪实体生成器”为我的EF4模型生成代码。谢谢!在字符串中向下引用表名有点不利于重构,也许我可以通过向服务中添加显式方法来解决这个问题。很高兴知道这个限制,这会让我以后有些头疼:)如果您不喜欢使用带有导航属性名称chech EF 4.1的Include,因为它有带有lambdas的强类型版本。