Ho una tabella "Job" che contiene lavori. Il fatto è che i lavori non sono sempre fatti in un colpo solo ... puoi avere un lavoro che ha molte visite. Intendevo rappresentarlo come un altro lavoro, ma collegato al lavoro originale tramite linkId autoreferenziale.
Ho difficoltà a rappresentarlo utilizzando l'API fluente. Ha una relazione uno a molti .. un lavoro potrebbe avere molte visite e quindi un certo numero di linkId punta al lavoro originale. L'ID del collegamento tornerebbe all'ID lavoro originale. È anche opzionale poiché la maggior parte dei lavori potrebbe essere completata in una volta.
Ho cercato questo, ma è difficile trasformare gli altri esempi in questo esempio dato che molti di loro sono uno a uno e più avanti quelli che forniscono esempi di uno a molti sembrano farlo usando EF6 che è diverso.
La mia tabella di lavoro è:
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; }
}
}
Sono abbastanza sicuro di aver sbagliato:
// 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);
Come rappresento uno a uno su molti di riferimento in EF7 e API fluente e quale è facoltativo?
EDIT : mentre questo non fornisce un errore di sintassi, devo dire che non sono sicuro se è OK
modelBuilder.Entity<Job>().HasMany(j => j.LinkedJobs).WithOne().IsRequired(false);
Qualsiasi aiuto su questo è apprezzato ... Ho trovato poco prezioso nel modo di sapere su come configurare un rapporto di auto-referenza da uno a molti ...
Classe di lavoro:
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 fluente:
modelBuilder.Entity<Job>()
.HasMany(oj => oj.ChildJobs)
.WithOne(j => j.ParentJob)
.HasForeignKey(j => j.JobId);