1

Ich bin ziemlich neu in ASP.NET MVC, ich habe versucht, eine Lösung dafür zu finden, aber ich bin nicht in der Lage, ein ähnliches Beispiel zu finden, habe ich gelesen, dass dies ist weil meine Beziehung null ist, wenn es * sein muss. Ich möchte, dass meine ProposalFB-Tabelle einen zusammengesetzten Primärschlüssel einer Lektor-E-Mail (lecEmail) und eine Studenten-E-Mail (studEmail) hat, die beide aus verschiedenen Tabellen stammen (Dozent und Student). Zuerst dachte ich, ich könnte es beheben, wenn Daten drin wären der Dozenten- und Schülertisch hat leider nicht funktioniert. Immer, wenn ich zu Gerüst versuchen bekomme ich enter image description hereComposite-Primärschlüssel mit zwei Fremdschlüsseln aus zwei verschiedenen Tabellen mvc

Meine Modelle wie folgt aussehen: Student.cs

public class Student 
{ 
    [Key] 
    public string studEmail { get; set; } 
    public string projectType { get; set; } 
    public string projectTitle { get; set; } 
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
    public Nullable<System.DateTime> year { get; set; } 
    public virtual ProposalFB ProposalFB { get; set; } 
} 

Lecturer.cs

public class Lecturer 
{ 
    [Key] 
    public string lecEmail { get; set; } 
    public virtual ProposalFB ProposalFB { get; set; } 
} 

ProposalFB.cs

public class ProposalFB 
{ 
    [Key, ForeignKey("Student"), Column(Order = 0)] 
    public string studEmail { get; set; } 
    [Key, ForeignKey("Lecturer"), Column(Order = 1)] 
    public string lecEmail { get; set; } 
    public string feedback1 { get; set; } 
    public string feedback2 { get; set; } 
    public string feedback3 { get; set; } 
    public string feedback4 { get; set; } 
    public string feedback5 { get; set; } 
    public float proposalMark { get; set; } 
    public Nullable<System.DateTime> createdOn { get; set; } 
    public Nullable<System.DateTime> modified { get; set; } 
    public bool status { get; set; } 
    public virtual Student Student { get; set; } 
    public virtual Lecturer Lecturer { get; set; } 
} 

Wirklich schätzen einige Anleitung zur Korrektur Dieses

+2

1. Composite-Tasten sind in der Regel eine schlechte Idee. 2. Zusammengesetzte Schlüssel aus Fremdschlüsseln sind * immer * eine schlechte Idee. 3. Ein Schlüssel (primär oder fremd) sollte sich auf einer indizierten Spalte befinden, für die Strings nicht geeignet sind. Lang und kurz: Fügen Sie Ihrem Tisch nur ein paar gute Primärschlüssel hinzu und lassen Sie diese Albernheiten verschwinden. –

+0

@ChrisPratt Mein Grund dafür ist, die E-Mail-Adresse eines Studenten und Dozenten nicht in der Tabelle "ProposalFB" zu wiederholen, gibt es einen einfacheren Weg, dies zu verwalten als mein vorgeschlagenes Modell? – Newbie

+0

Sicher. Fügen Sie einfach eine eindeutige Einschränkung für die Spalte hinzu. Muss kein Schlüssel sein. –

Antwort

1

Ihre ProposalFB Einheit repräsentiert many-to-many Beziehung zwischen Student und Lecturer. Daher Student und Lecturer nicht ein einzelnes Element ProposalFB Eigenschaft haben kann, sollte es sich um eine Sammlung von ProposalFB sein:

public class Student 
{ 
    // ... 
    public virtual ICollection<ProposalFB> ProposalFB { get; set; } 
} 

public class Lecturer 
{ 
    // ... 
    public virtual ICollection<ProposalFB> ProposalFB { get; set; } 
} 
+0

Dies funktionierte wie erwartet und korrigiert dieses Problem, das ich hatte – Newbie