asp.net核心实体框架7自引用作业1到多桌

本文关键字:作业 自引用 net 核心 实体 框架 asp | 更新日期: 2023-09-27 18:17:51

我有一个包含作业的"Job"表。事实上,工作并不总是一蹴而就的。你可以有一份访问次数很多的工作。我打算将其表示为另一个作业,但通过自引用linkId链接回原始作业。

我有麻烦表示这使用流畅的API。这是一对多的关系…一个作业可能有许多访问,因此许多链接指向原始作业。链接Id将返回到原始作业Id。这也是可选的,因为大多数工作可能一次完成…

我一直在寻找这个,但是很难把其他例子变成这个例子,因为它们中的很多都是一对一的,而且那些给出一对多例子的例子似乎使用了EF6,这是不同的。

我的工作表是:

    using System;
namespace JobsLedger.Model.Entities
{
    public class Job : IEntityBase
    {
        public int Id { get; set; }
        public string Model { get; set; }
        public string Serial { get; set; }
        public string ProblemDetails { get; set; }
        public string SolutionDetails { get; set; }
        public DateTime JobDate { get; set; }
        public int BrandId { get; set; }
        public int JobTypeId { get; set; }
        public int StatusId { get; set; }
        public int ClientId { get; set; }
        public int UserId { get; set; }
        public int? LinkId { get; set; }  //If there are more than one job callout eg back to fit parts.
        public Job MultipleJobVisits { get; set; }
    }
}

我很确定我写错了:

        // Job
        modelBuilder.Entity<Job>().Property(j => j.Model).HasMaxLength(100);
        modelBuilder.Entity<Job>().Property(j => j.Serial).IsRequired();
        modelBuilder.Entity<Job>().Property(j => j.ProblemDetails).HasMaxLength(100);
        modelBuilder.Entity<Job>().Property(j => j.SolutionDetails).HasMaxLength(500);
        modelBuilder.Entity<Job>().Property(j => j.JobDate);
        modelBuilder.Entity<Job>().Property(j => j.Notes).HasMaxLength(1000);
        modelBuilder.Entity<Job>().Property(j => j.BrandId);
        modelBuilder.Entity<Job>().Property(j => j.JobTypeId);
        modelBuilder.Entity<Job>().Property(j => j.StatusId);
        modelBuilder.Entity<Job>().Property(j => j.ClientId);
        modelBuilder.Entity<Job>().Property(j => j.UserId);
        modelBuilder.Entity<Job>().HasOne(x => x.Id)
                                  .WithMany(x => x.LinkId)
                                  .ForeignKey(x => x.Id)
                                  .Required(false);

我如何在EF7和流畅的API中表示一对多的自我引用,这是可选的?

EDIT:虽然这并没有提供语法错误,但我不得不说我不确定它是否OK

modelBuilder.Entity<Job>().HasMany(j => j.LinkedJobs).WithOne().IsRequired(false);

在这方面的任何帮助是感激的…在如何配置一对多的自引用关系方面,我发现了宝贵的知识…

asp.net核心实体框架7自引用作业1到多桌

作业类别:

public class Job
{
    public int Id { get; set; }
    public int? JobId { get; set; }
    public Job ParentJob { get; set; }
    public ICollection<Job> ChildJobs { get; set; }
}

流利的API:

modelBuilder.Entity<Job>()
                .HasMany(oj => oj.ChildJobs)
                .WithOne(j => j.ParentJob)
                .HasForeignKey(j => j.JobId);