繁体   English   中英

具有多个可选一对一关系的实体框架表

[英]Entity Framework table with multiple optional one to one relationships

有几个问题,但没有一个对我有太大帮助,所以我决定问自己的问题。

我想先使用实体​​框架代码来创建一个奇怪的关系。 我有三个实体( QualificationTestProcedure ),它们都可以选择拥有文件。 我试图将所有文档存储在一张表中。 如何配置所有这些实体之间的关系。

  • Qualification有一对一的可选Document
  • Test有一对一的可选Document
  • Procedure有一对多的可选Documents

Document与一项QualificationTestProcedure具有必需的关系。

public class Assessment
{
    public int AssessmentId { get; set; }
    //Other properties in Assessment
    public Document Document { get; set; }
}

public class Qualification
{
    public int QualificationId{ get; set; }
    //Other properties in Qualification
    public Document Document { get; set; }
}

public class Procedure
{
    public int ProcedureId { get; set; }
    //Other properties in Procedure
    public ICollection<Document> Documents { get; set; }
}

public class Document
{
    public int DocumentId { get; set; }
    //Other properties in Document
    public Qualification Qualification { get; set; }
    public Assessment Assessment { get; set; }
    public Procedure Procedure { get; set; }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // Not sure what goes here, but this was not working 
    modelBuilder.Entity<Document>()
        .HasOptional(d => d.Qualification).WithOptionalPrincipal(q => q.Document);

    modelBuilder.Entity<Document>()
        .HasOptional(d => d.Asssessment).WithOptionalPrincipal(q => q.Document);
}

添加迁移时出现错误:

无法确定类型之间关联的主要端。 必须使用关系流畅 API 或数据注释显式配置此关联的主体端。

我不知道该怎么做。 我在AssessmentQualification有一个可为空的 int DocumentId但这将不起作用 b/c Procedure可以保存一个集合,因此Document必须保存 Id。 Document是否为每个可能的父级持有一个可为空的 ID? 请帮忙。

在您的映射中,您将Document设置为主体,但实际上它是从属的。 因此,您应该将映射更改为:

modelBuilder.Entity<Document>()
    .HasRequired(d => d.Qualification)
    .WithOptionalDependent(q => q.Document);

modelBuilder.Entity<Document>()
    .HasRequired(d => d.Asssessment)
    .WithOptionalDependent(q => q.Document);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM