2017-04-08 2 views
0

Ich kann den "ID" -Wert von Student in "StudentID" der StudentCourses-Tabelle nicht speichern. Wenn kein Fehler zurückgegeben wird, stimmen Datentypen auch überein.Kann Primärschlüsselwert zu einer anderen Tabellenspalte desselben Datentyps nicht zuordnen

Ansichtsmodell: StudentVM

public class StudentVM 
    { 
     public Student student { get; set; } 
     public SelectList Courses { set; get; } 
     public int SelectedCourseID { get; set; } 
     public StudentCourses studentCourse { get; set; } 

    } 

Die „St.Id“ gibt mir einen Wert jedoch seinen Wert nicht auf „StudentID“ Feld StudentCourse Tabelle übertragen bekommen, ohne Fehlermeldung.

[HttpPost] 
     public ActionResult Create(FormCollection Form,StudentVM Vm) { 
      // string strDDLValue = Vm.SelectedCourseID; 

      Student st = new Student() {Name=Vm.student.Name }; 

      var stname=st.Name; 

      int stid = st.Id; //No transfer of value takes place.stid is null 

      StudentCourses stc = new StudentCourses() { CourseID = Vm.SelectedCourseID, StudentID = st.Id }; 

      db.Students.Add(st); 

      db.StudentCourses.Add(stc); 

      db.SaveChanges(); 
      return View(); 
     } 

Das Objekt St liefert tatsächlich Werte zurück. bitte guck dir das an.

enter image description here

+1

Alles, was Sie getan haben, ist eine neue Instanz von 'Student' initialisiert und die Eigenschaft' Name' festgelegt. Nirgendwo haben Sie seine 'Id' -Eigenschaft so gesetzt, dass' int stid = st.Id '' null' oder '0' zurückgibt, abhängig davon, wo die Eigenschaft' int? 'Oder' int' ist (und ein Ansichtsmodell sollte nicht enthalten ein Datenmodell beim Editieren!) –

+0

St.Id gibt einen Wert zurück, schaue bitte auf das Bild, das ich hinzugefügt habe. – Arun3x3

+0

Dann müssen Sie 'Student' einen Standardkonstruktor haben, der den Wert setzt, was bedeutet, dass' std' 2004 ist (nicht null als Ihr Anspruch!) Oder Sie diesen Wert im Debugger nach der 'db.SaveChanges();' Zeile lesen . –

Antwort

1

Sie sollten nicht die IDs zuweisen, sondern die gesamten Einheiten zu einander.

StudentCourses stc = 

new StudentCourses() { CourseID = Vm.SelectedCourseID, Student = st }; 

Auf diese Weise auf SubmitChanges() LSS wird die ID kennen und die entsprechenden Beziehungen innerhalb einer einzigen Transaktion zuordnen.

+0

Sie sind so richtig @Pleun. Vielen Dank – Arun3x3

Verwandte Themen