0

У меня есть таблица «Job», которая содержит задания. Дело в том, что Джобс не всегда делается за один раз. У вас может быть работа, в которой много посещений. Я намеревался представить это как другую работу, но связал ее с исходной работой через self referencing linkId.aspnet core entity framework 7 self referencing "job" 1 to many table

У меня возникли проблемы с представлением этого с использованием свободного API. Его отношение «один к многим». Одна работа может иметь много посещений и, следовательно, ряд ссылок ссылается на оригинальную работу. Идентификатор ссылки вернется к исходному идентификатору задания. Его также необязательно, так как большинство рабочих мест могут быть завершены за один раз.

Я искал это, но его трудно привести другие примеры к этому примеру, так как многие из них являются один к одному, а также те, которые дают examples один из многих, похоже, делает это, используя 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: в то время как это оленья кожа обеспечивают синтаксическую ошибку я должен сказать, что я не уверен, если его ОК

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

Любая помощь по этому вопросу ценится ... Я нашел драгоценный немного в пути знания о том, как настроить один ко многим отношений самих ссылающимися ...

ответ

4
класса

работы:

public class Job 
{ 
    public int Id { get; set; } 

    public int? JobId { get; set; } 

    public Job ParentJob { get; set; } 

    public ICollection<Job> ChildJobs { get; set; } 
} 

Fluent API:

modelBuilder.Entity<Job>() 
       .HasMany(oj => oj.ChildJobs) 
       .WithOne(j => j.ParentJob) 
       .HasForeignKey(j => j.JobId); 
Смежные вопросы