2016-11-30 5 views
0

Wie kann ich eine benutzerdefinierte viele zu viele Beziehung mit Additionsfeldern zuordnen? In diesem Fall DateTime im Zeitplan.Viele zu viele mit zusätzlichen Feldern, Entity Framework

Problem jetzt ist es eine neue Tabelle erstellt namens StaffSchedules

public class Schedule 
{ 
    public int Id { get; set; } 
    public DateTime DateTime { get; set; } 

    public List<Staff> Staff { get; set; } 
    public int StaffId { get; set; } 

    public Patient Patient { get; set; } 
    public int PatientId { get; set; } 
} 

public class Staff 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 

    public List<Schedule> Schedules { get; set; } 
} 

...

public DbSet<Schedule> Schedules { get; set; } 
public DbSet<Staff> Staff { get; set; } 

Gewünschtes Ergebnis: enter image description here

+0

Sie müssen die Verknüpfungstabelle selbst (StaffSchedules) einzurichten und betreiben einen 1: M Bezug auf diese Tabelle sowohl von Personal und Terminen. Sie können die Zuordnungen mithilfe einer fließenden API in Ihrer Kontextdatei konfigurieren. – RizJa

Antwort

2

eine Klasse hinzufügen wie folgt:

public class StaffSchedule 
{ 
    public int StaffId { get; set; } 
    public int ScheduleId { get; set; } 
    public virtual Staff Staff { get; set; } 
    public virtual Schedule Schedule { get; set; } 

    public DateTime Date { get; set; } 
} 

Ändern Sie bitte Ihre Mitarbeiter und Zeitplan Klassen:

public class Schedule 
{ 
    public int Id { get; set; } 
    //Other Fields 
    public ICollection<StaffSchedule> StaffSchedules { get; set; } 
} 

public class Staff 
{ 
    public int Id { get; set; } 
    //Other Fields 
    public ICollection<StaffSchedule> StaffSchedules { get; set; } 
} 

Und schließlich, in der Kontextdatei (OnModelCreating-Methode):

modelBuilder.Entity<Staff>().HasKey(x => x.Id); 
modelBuilder.Entity<Schedule>().HasKey(x => x.Id); 

modelBuilder.Entity<StaffSchedule>().HasKey(x => 
    new 
    { 
     x.StaffId, 
     x.ScheduleId 
    }); 

modelBuilder.Entity<StaffSchedule>() 
    .HasRequired(x => x.Staff) 
    .WithMany(x => x.StaffSchedules) 
    .HasForeignKey(x => x.StaffId); 

modelBuilder.Entity<StaffSchedule>() 
    .HasRequired(x => x.Schedule) 
    .WithMany(x => x.StaffSchedules) 
    .HasForeignKey(x => x.ScheduleId); 

UPDATE:

aussieht wie du wollte das eigentlich:

public class Patient 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class Staff 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class Schedule 
{ 
    public int Id { get; set; } 
    public DateTime Date { get; set; } 

    public int PatientId { get; set; } 
    public int StaffId { get; set; } 

    [ForeignKey("PatientId")] 
    public virtual Patient Patient { get; set; } 
    [ForeignKey("StaffId")] 
    public virtual Staff Staff { get; set; } 
} 
+0

Dies erstellt Staff, StaffSchedule und Schedules. Was mache ich jetzt falsch? –

+0

Ein Bild von dem, was ich meine, weiß nicht, ob ich jetzt falsch denke, aber –

+0

Aktualisiert die Antwort. Ich hoffe, das hilft. – RizJa

Verwandte Themen