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
字段的HasKey
或Property
调用,因为它们已按惯例假设。 您的表必须在此配置中具有列DocumentId
。