gpt4 book ai didi

c# - Entity Framework Fluent API 映射简单的一对多关系

转载 作者:太空狗 更新时间:2023-10-30 00:54:32 25 4
gpt4 key购买 nike

我有两个表:

  • 文档(Id、DocumentTypeId、标题、详细信息)
  • 文档类型(ID、名称、说明)。

DocumentTypeId 是引用 DocumentTypes 表的外键。 IE。所有文件都可以 有一个分配给他们的类型。

我有两个类:

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'

我的问题是如何设置这样的一对多关系? IE。我想要许多不同文档类型的文档。

最佳答案

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

关于c# - Entity Framework Fluent API 映射简单的一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12458887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com