Bas*_*dov 4 .net c# entity-framework
我有两张桌子:
DocumentTypeId是引用DocumentTypes表的外键.即所有文档都可以分配一个类型.
我有两节课:
public class Document
{
public string Id { get; set; }
public string Title { get; set; }
public DocumentType DocumentType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和
public class DocumentType
{
public string Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个配置
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();
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.我收到此错误消息:
Invalid column name 'DocumentType_Id'
Run Code Online (Sandbox Code Playgroud)
如果我将fk列重命名为DocumentType_Id,那么我收到此错误消息:
Invalid column name 'DocumentTypeId'
Run Code Online (Sandbox Code Playgroud)
我的问题是如何设置这样的一对多关系?即我想要有许多不同文档类型的文档.
首先进行此更改.导航属性必须是virtual:
public class Document
{
public string Id { get; set; }
public string Title { get; set; }
public virtual DocumentType DocumentType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后将配置更改为:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
您不需要HasKey或Property调用该Id字段,因为它们已按惯例假定.您的表必须具有DocumentId此配置中的列.