c# - Entity Framework 可选 :optional relationship

标签 c# entity-framework

我正在尝试建立一个具有可选关系的 Entity Framework 模型:可选关系:

在我的情况下,有时存在指向 BaseTable 记录的 AdditionalData 记录,但有时 BaseTable 或 AdditionalData 记录存在时没有任何链接。 BaseTable 的外键(如果存在)在 AdditionalData 表上。

我希望能够在 BaseTable 和任何可能连接的 AdditionalData 之间来回导航。

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"));

但它告诉我:

error: (1564,6) : error 0019: Each property name in a type must be unique. Property name 'BaseTableId' was already defined.

我不确切知道那指的是什么,也不确定如何解决。

编辑:如果我按照此处的建议删除 Map/MapKey 子句 (https://stackoverflow.com/a/8016308/237091),当使用它的查询运行时,我会收到此错误:

Invalid column name 'BaseTable_Id' as it maps itself to BaseTable_Id automatically instead of my BaseTableId field.

最佳答案

看起来您正在尝试从您的 AdditionalType 对象建立一个 1:0..1 的关系(我可能完全误解了它。

注意我认为你必须在你的 BaseTable 上持有一个 BaseTableId 才能工作(或定义一个主键):

如果 BaseTableId 是这个实例中的外键,我认为这可能是您想要的:

modelBuilder.Entity<AdditionalType1>()
    .HasOptional(zmt => zmt.BaseTable)
    .WithMany()
    .HasForeignKey(a => a.BaseTableId);

这是我以前用过的,但不能承认完全理解它(.WithMany() 让我失望);这是此答案的文章中列出的一个小解决方法:Entity Framework 0..1 to 0 relation )

如果我完全错过了要点,我深表歉意。

关于c# - Entity Framework 可选 :optional relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17346231/

相关文章:

c# - 在 Aspnet Core 中加载元数据

c# - EEMessageException 是什么类型的异常?

c# - 在 C# .Net 2.0 中编写图像元数据

c# - Log4net.dll + C# + Crystal Reports = 错误

c# - Entity Framework 4 按 ID 加载记录

.net - 导航属性 'SenderId' 不是类型 'Conversation' 上的声明属性

c# - 使用未知大小队列的网络爬虫的生产者/消费者

c# - mysql 创建唯一索引,索引名称中带有空格

c# - 自动生成的实体类中缺少导航属性

c# - Entity Framework 数据注释对 DDD 和关注点分离有害吗?