我正在尝试设置具有可选:可选关系的实体框架模型:
在我的情况下,有时存在指向 BaseTable 记录的 AdditionalData 记录,但有时存在 BaseTable 或 AdditionalData 记录而没有任何链接。BaseTable 的外键(如果存在)在 AdditionalData 表上。
我希望能够在 BaseTable 和可能连接的任何 AdditionalDatas 之间来回导航。
BaseTable 0..1 ----- 0..1 AdditionalData1
\
--- 0..1 AdditionalData2
public class BaseTable {
public int Id { get; set; }
public virtual AdditionalType1 AdditionalType1 { get; set; }
public virtual AdditionalType2 AdditionalType2 { get; set; }
}
public class AdditionalType1 {
public int Id { get; set; }
public int? BaseTableId { get; set; }
public virtual BaseTable BaseTable { get; set; }
}
public class AdditionalType2 {
public int Id { get; set; }
public int? BaseTableId { get; set; }
public virtual BaseTable BaseTable { get; set; }
}
我该如何进行这项工作?我做到了:
modelBuilder.Entity<AdditionalType1>()
.HasOptional(zmt => zmt.BaseTable)
.WithOptionalDependent(zm => zm.AdditionalType1)
.Map(a => a.MapKey("BaseTableId"));
modelBuilder.Entity<AdditionalType2>()
.HasOptional(zmt => zmt.BaseTable)
.WithOptionalDependent(zm => zm.AdditionalType2)
.Map(a => a.MapKey("BaseTableId"));
但它告诉我:
错误:(1564,6):错误0019:类型中的每个属性名称必须是唯一的。已定义属性名称“BaseTableId”。
我不知道具体指的是什么,也不知道如何解决。
编辑:如果我按照此处的建议删除 Map/MapKey 子句(https://stackoverflow.com/a/8016308/237091),当使用它的查询运行时,我会收到此错误:
列名“BaseTable_Id”无效,因为它自动将自身映射到 BaseTable_Id 而不是我的 BaseTableId 字段。