entity frameworkFluent API用于映射简单的一对多关系

我有两张桌子:

  • 文件(Id,DocumentTypeId,标题,详细信息)
  • DocumentTypes(Id,Name,Description)。

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 { 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 { public DocumentsConfiguration() { HasRequired(document => document.DocumentType) .WithMany() .Map(e => e.MapKey("DocumentTypeId")); Property(document => document.Title).HasColumnName("Title").IsRequired(); ToTable("Documents"); } } 

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