4

我有两张桌子:

  • 文档(Id、DocumentTypeId、标题、详细信息)
  • 文档类型(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'

我的问题是如何设置这种一对多的关系?即我想拥有许多具有不同文档类型的文档。

4

1 回答 1

6

首先进行此更改。导航属性必须是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");
    }
}

您不需要该字段的HasKeyorProperty调用,Id因为它们已经按惯例假定。DocumentId在此配置中,您的表必须有一列。

于 2012-09-17T12:13:44.667 回答