我有两个桌子:

  • 文件(编号,文件类型编号,标题,详细资料)
  • DocumentTypes(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'

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

#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");
    }
}

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

  ask by Bashir Magomedov translate from so

未解决问题?本站智能推荐:

2回复

实体框架-一对多关系-仅映射到一个元素

我的示例如下:我有一个[Table1]与[Table2]有一对多的关系。 可以说它看起来像: [Table2]确实具有[Table1]的外键,并且[Table2]中可能有多个与[Table1]相关的元素。 我知道如何通过代码定义[Table1]和[Table2]之间的映射,这
4回复

实体框架6中的一对多关系

我有两个简单的表必须映射到现有数据库中的列: 以下是两者的配置类: 这会导致错误: The item with identity 'StockItem_ExtendedProperties' already exists in the metadata collection. P
1回复

实体上的一对多关系

您会在Entity Framework 5.0上看到我的模型结构,并且User实体持有对Address和Address1实体的引用。 另一方面,地址将“用户”集合作为引用,但是实体框架无法知道用户依赖于哪个“地址”引用,所以我遇到了异常。 有什么解决方案呢? 我的意思是说流利和不流利的
2回复

实体框架-代码优先-共享主键一对多关系

任何人都知道如何使用EF Code First Fluent API来实现此方案: 感谢您的答复
1回复

使用一对多关系更新实体

我遇到了存在一对多关系的问题,并且我试图更新表和链接表之一中的数据。 我有两个表(用户,角色)和一个链接表(UserRoles)。 用户具有许多角色。 角色是预定义的,只有3行,如下所示。 我想用角色更新用户。 我无法使用以下代码。 请分享您的意见。
1回复

实体框架:相同表之间的一对一和一对多关系[重复]

这个问题在这里已经有了答案: 如何在 Entity Framework Core 中使用循环依赖正确地播种数据? (1 个回答)
1回复

在一对多关系.net实体框架中以一种视图显示数据

我的数据库中有两个表:Student(很多)和Department(一个)和一对多的关系。 我想为每个StudentName显示带有DepartmentName的列表,但出现此错误:System.NullReferenceException:对象引用未设置为对象的实例。 这是我的控制器代
1回复

当我需要一对多关系时,实体框架会创建Int字段[重复]

这个问题已经在这里有了答案: 自引用多对多递归关系代码优先Entity Framework 4个答案 我有一个简单的C#类,它是我想在SQL Server中拥有的表的模型。 这是课程: 创建迁移时,这是Entity Framework为该表生成的内容: