2009-03-07 3 views
1

Ich entwickle StudentApp in .NET 3.5 SP1 MVC-Anwendung.Wie erhalten Sie den Fremdschlüssel in Entity Framework?

Ich habe zwei Tabellen

  1. Course
    courseid, COURSE_NAME
  2. Studenten
    studentID, student_Name, courseID (fk)

Jetzt habe ich StudentApp.dbml gemacht, die beide aufweist, Tabelle als Entitäten.

Als Fremdschlüssel wird nicht in studentischen Entität, Ich kann nicht KursID in Student-Modell anzeigen, mehr über ich kann nicht hinzufügen, bearbeiten, Listenansichten erstellen.

Also sagen Sie mir, wie statt courseID (fk) in Studenten & ich will auch Kursname angezeigt werden soll.

Und Dropdownbox auch Kursname & zeigt courseID in Bearbeitungsansicht zu speichern.

+0

Sind Sie sicher, dass Sie das Entity Framework verwenden? DBML Mapping-Dateien sind für Linq zu Sql – RobS

+0

Ops Sie hatten Recht, es war Entity Framework – Vikas

+0

Bitte bearbeiten Sie die Frage, so dass es Sinn macht, dann. L2S und EF behandeln Fremdschlüssel * komplett * anders. –

Antwort

1

Wenn Ihr mit LINQ-to-SQL und eine DBML Datei in Visual Studio erstellt dann die Fremdschlüssel können über die Course Eigenschaft im Student Objekt (automatisch generiert, so aufgeführt werden, da es sich um eine Eins-zu-viele-Beziehung von Student). Sortieren dies wie:

var studentCourseIds = 
    from s in context.Students 
    select s.Course.CourseID; 

Da Ihr Ziel ist es, die course dann zu finden, es mit Student.Course.course_Name bereits zugänglich ist.

+0

ya danke. Ich habe bereits LINQ to SQL-Klasse verwendet. Mein Ziel ist es, Student Objekt in einer Ansicht anzuzeigen, die alle Datensätze auflisten. also wo ich oben Code, wie ich MVC-Architektur verwenden ..? – Vikas

+0

Vikas: Es hängt davon ab, welche Strategie Sie mit Ihrem MVC verwenden. In meinem MVC erstelle ich eine Repository-Klasse (es ist eine Repository-Muster-Sache) im Modell, die Sachen im Allgemeinen zurückgibt, die ich von der Datenbank haben möchte. Und dann habe ich eine Service-Klasse, die weiter filtert, was ich vom Repository will. – Spoike

0

Können Sie Ihre DBML posten? Außerdem wird DBML in LINQ to SQL (L2S) verwendet. EDMX ist das Mapping, das im ADO Entity Framework verwendet wird. Verwenden Sie LINQ to SQL oder das Entity Framework (EF)?

Egal, welche Sie verwenden - sie unterstützen beide Fremdschlüssel und Sie würden eine Eigenschaft erhalten, die beide Seiten der Beziehung darstellt - Sie müssen nichts Spezielles tun (der Fremdschlüssel muss in der Datenbank vorhanden sein, von Kurs).

In EF werden die Fremdschlüssel als "Navigationseigenschaften" bezeichnet und funktionieren in L2S etwas anders als Fremdschlüssel. Nichts wichtiges, aber sie zu aktualisieren und "eifrig laden" sind etwas anders.

Legen Sie die Tabellen einfach im Designer in Visual Studio auf die Karte (oder generieren Sie mithilfe von Befehlszeilenäquivalenten, wenn Sie dies bevorzugen).

In Bezug auf Fremdschlüssel und Drop-Down-Listen (und andere UI Güte) - Ich schrieb ein paar Blog-Einträge auf einige Ansätze, die zu Ihnen passen könnten. Ein Teil befindet sich here und Teil zwei befindet sich here.

+0

StudentApp.dbml ist ein Entity-Datenmodell. so in Student-Tabelle CourseID wird keine Zuordnung haben. Mapping wird als eine Assoziation betrachtet. mehr über Ich benutze MVC-Architektur. Ich füge eine Indexansicht des Schülers hinzu, so dass es von StudentApp.model erbt, welches automatisch vom Entity-Framework generiert wird. – Vikas

+0

so werde ich nicht courseID im modell bekommen .... also was soll ich tun ?? – Vikas

0

, wenn Sie das richtige Verhältnis in der SQL-Server-Datenbank zu erstellen, dann, wenn Sie die Tabellen zu Ihrem DBML Designer hinzufügen, werden die Beziehungen kopiert über auch und Ihr Code wird automatisch verknüpfen.

2

Ich bin ziemlich sicher, dass Sie die ausländische Referenz für jede Entität laden müssen. Da ich keine Ahnung habe, wie Sie Ihre API erstellt haben, muss ich Ihnen ein Pseudocode-ähnliches Beispiel geben, aber ich denke, das ist es, was Sie tun müssen.

List<Students> studList = [your_db_facade].SelectStudents() // Or however you retrieve your students 

foreach (Students singleStudent in studList) 
    singleStudent.Context.CourseReference.Load() //CourseReference.Load() should be in the framework 

Dann erhalten Sie die courseid und Namen von der einzelnen Schüler Entität wie

singleStudent.Course.CourseID 
singleStudent.Course.course_Name 

Es könnte für Sie etwas anders aussehen, aber ich denke, der Schlüssel, Ihr Problem zu lösen, ist CourseReference.Load() .