5

Ich benutze EntityFramework 4.1.Mehrere Eins-zu-viele Beziehungen mit Entity Framework

Ich habe folgendes Modell:

public class User 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 

    public virtual User Creator { get; set; } 
    public virtual User LastEditor { get; set; } 
} 

Wenn ich versuche, meine Datenbank zu generieren bekam ich diesen Fehler:

Unable to determine the principal end of an association between the types 'User' and 'User'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.

Aber ich diese Klasse auch haben:

public class Course 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 

    public virtual User Creator { get; set; } 
    public virtual User LastEditor { get; set; } 
} 

Und es funktioniert ok, ich habe diese Fremdschlüssel generiert:

Creator_Id 
LastEditor_Id 

Muss ich meinem Benutzermodell etwas hinzufügen, damit es funktioniert?

+0

Werfen Sie einen Blick auf diese Frage und sehen, ob es Sie in die richtige Richtung führt: http://stackoverflow.com/questions/6531671/what-does-prinzip-Ende-einer-Assoziation-bedeutet-in-11-Beziehung-in-entity-fr – Cyric297

Antwort

7

EF versucht - vereinbarungsgemäß - eine Eins-zu-Eins-Beziehung zwischen User.Creator und User.LastEditor zu schaffen, weil sie beide auf die User Klasse verweisen, wo sie sich in befinden, das ist nicht der Fall für die Course Klasse.. Für Course.Creator und Course.LastEditor erstellt EF zwei 1: n-Beziehungen zu User. Um das gleiche für die Eigenschaften in User erreichen Sie die Beziehungen mit Fluent API konfigurieren:

modelBuilder.Entity<User>() 
    .HasOptional(u => u.Creator)  // or HasRequired 
    .WithMany(); 

modelBuilder.Entity<User>() 
    .HasOptional(u => u.LastEditor) // or HasRequired 
    .WithMany(); 
+0

Danke! Es klappt! Und schöne Erklärung. –