aspnet核心實體框架7自引用“作業”1到多表

c# ef-fluent-api entity-framework entity-framework-core self-reference

我有一個包含工作的“工作”表。事實上喬布斯並不總是一氣呵成......你可以找到一份有很多訪問的工作。我打算將其表示為另一項工作,但通過自引用linkId鏈接回原始工作。

我無法使用流暢的API代表這一點。它是一對多關係..一個工作可能有很多訪問,因此一些linkId指向原始工作。鏈接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和Fluent API中表示一對多的自引用,哪些是可選的?

編輯 :雖然這不提供語法錯誤,我不得不說我不確定它是否正常

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

對此有任何幫助... ...我發現在如何配置一對多自引用關係方面的知識方面很少...

一般承認的答案

工作類:

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);


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow