实体框架数据库映射

时间:2021-04-19 09:18:14

标签: c# entity-framework .net-core

public class Requisitions
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int JobID { get; set; }
        [Required]
        public string JobNumber { get; set; }
        [Required]
        public string Username { get; set; }
        [Required]
        public string Department { get; set; }
        [Required]
        public string Details { get; set; }
        [Required]
        public DateTime DateOfComplaint { get; set; }
        [Required]
        public string Period { get; set; }
        [Required]
        public DateTime EndDate { get; set; }
    }

public class Requisitions_Sections
    {
        public Requisitions Requisitions { get; set; }
        [ForeignKey("Requisitions")]
        public int JobIDFK { get; set; }
        [Required]
        public string Section { get; set; }
    }

我正在尝试将此外键映射到 requisition_sections 类,但出现此错误 The entity type 'Requisitions_Sections' requires a primary key to be defined. If you intended to use a keyless entity type, call 'HasNoKey' in 'OnModelCreating'. For more information on keyless entity types,

我为此创建了单独的类。

在 mysql JobIDFK 和 section 中都应该是主键我不知道如何在 SQL Server 中做到这一点,这有一对多的关系,一个 jobID 有很多节。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

该错误是由于模型“Requisitions_Sections”未定义任何键属性。但是,如果您想跟踪更改,建议为模型定义键< /strong>

如果您的模型不需要任何密钥,您可以使用 [keyless] 数据注释或 .HasNoKey() 方法调用

[KeyLess]
public class Requisitions_Sections
    {
        public Requisitions Requisitions { get; set; }
        [ForeignKey("Requisitions")]
        public int JobIDFK { get; set; }
        [Required]
        public string Section { get; set; }
    }

以下是使用无键实体类型的一些特征

  1. 永远不会跟踪 DbContext 中的更改,因此永远不会在数据库中插入、更新或删除。
  2. 按照惯例从未被发现。
  3. 仅支持一部分导航映射功能
  4. 他们可能永远不会成为关系的主要终点。
  5. 他们可能没有到拥有实体的导航
  6. 它们只能包含指向常规实体的参考导航属性。
  7. 实体不能包含无键实体类型的导航属性。