簡體   English   中英

實體框架Fluent API可映射簡單的一對多關系

[英]Entity Framework Fluent API to map simple one-to-many relation

我有兩個桌子:

  • 文件(編號,文件類型編號,標題,詳細資料)
  • DocumentTypes(ID,名稱,描述)。

DocumentTypeId是引用DocumentTypes表的外鍵。 也就是說,所有文件都可以分配一個類型。

我有兩節課:

public class Document
{
    public string Id { get; set; }
    public string Title { get; set; }
    public DocumentType DocumentType { get; set; }
}

public class DocumentType
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

我有一個配置

internal class DocumentsConfiguration : EntityTypeConfiguration<Document>
{
    public DocumentsConfiguration()
    {
        ToTable("Documents");
        HasKey(document => document.Id);
        Property(document => document.Id).HasColumnName("Id");

        HasRequired(document => document.DocumentType);//????????

        Property(document => document.Title).HasColumnName("Title").IsRequired();
    }
}

這是行不通的。 我收到此錯誤消息:

Invalid column name 'DocumentType_Id'

如果我將fk列重命名為DocumentType_Id,則會收到以下錯誤消息:

Invalid column name 'DocumentTypeId'

我的問題是如何設置這樣的一對多關系? 即我想擁有許多具有不同文檔類型的文檔。

首先進行更改。 導航屬性必須是virtual

public class Document
{
    public string Id { get; set; }
    public string Title { get; set; }
    public virtual DocumentType DocumentType { get; set; }
}

然后將配置更改為此:

internal class DocumentsConfiguration : EntityTypeConfiguration<Document>
{
    public DocumentsConfiguration()
    {
        HasRequired(document => document.DocumentType)
            .WithMany()
            .Map(e => e.MapKey("DocumentTypeId"));
        Property(document => document.Title).HasColumnName("Title").IsRequired();
        ToTable("Documents");
    }
}

您不需要Id字段的HasKeyProperty調用,因為約定已經假定它們。 您的表在此配置中必須具有一列DocumentId

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM