具有导航属性和外键属性的EF 6一对一

时间:2018-09-07 13:11:49

标签: entity-framework-6 one-to-one ef-fluent-api

我有一个使用EF 6的一对一/零关系。基本上,我有一个LocationItem对象,该对象可能与Scale对象相关联,也可能不与Scale对象相关联,并且Scale对象可能与或不与Scale对象相关联。 LocationItem对象。 LocationItem表包含Scale表的外键(称为ScaleId)。

我正在LocationItem类中使用以下流利的API。

HasOptional(x => x.Scale)
   .WithOptionalDependent(x => x.LocationItem)
   .Map(x => x.MapKey("ScaleId"));

然后,我在Scale类中具有LocationItem导航属性,在LocaitonItem类中具有Scale导航属性。正如我所说,所有这些都有效。

我遇到的问题是我需要将ScaleId包含在LocationItem类的属性中。我尝试将字段添加到POCO

public int? ScaleId { get; set; }

并将其映射到配置中

Property(x => x.ScaleId).HasColumnName("ScaleId");

但是,如果我收到以下验证错误

  

ScaleId:名称:类型中的每个属性名称必须唯一。属性名称“ ScaleId”已经定义。

但是它在其他任何地方都没有定义,所以我不知道错误是从哪里来的。一旦我注释掉这两行,错误就会消失。

我需要将比例尺ID作为属性包括在内的原因是,我偶尔需要查询没有比例尺或具有特定比例尺ID的项目。如果使用Scale导航属性(使用LocationItem.Scale.ScaleId)执行此操作,并查看生成的SQL,我可以看到它正在执行两个表之间的联接。我想消除这种额外的IO,因为我所需的所有信息都已经在LocationItem表中。

简而言之,我的问题是-使用一对一关系时,如何同时具有Scale导航属性和ScaleId作为LocationItem对象的另一个属性?

0 个答案:

没有答案