0

Ich verwende Entity Framework Version 6 in meiner MVC5-Anwendung. I-Datenmodell (.edmx) enthält 2 Einheiten Benutzer und Rolle meine Tabellen in der Datenbank entsprechende Benutzer und Rollen.Entity Framework 6 fügt Unterstrich mit Fremdschlüsselspalten an

Benutzer Tabellenspalten enthält: int Id, Namens NVarChar (100), RoleID int (RoleId hat Fremdschlüssel mit Roles.Id)

Roles Tabellenspalten enthält: int Id, Namens- nVarchar (100)

Mein Entitätsmodell generiert die korrekten Entitäten gemäß der Tabellenstruktur.

Nun, wenn ich Benutzer Einheit am abfragt (_db.Users.ToList()) von DB Kontext, Entity Framework sucht ROLE_ID Spalte in der Tabelle user statt RoleId Spalt, also in Fehlern führt.

Also meine Frage ist, warum Entity Framework Abfragegenerator nach Role_Id Spalte beim Abfragen von Entity sucht?

Antwort

0

Benutzer und Rollen haben normalerweise eine Viele-zu-Viele-Beziehung, daher sollten die entsprechenden Beziehungen sowohl in Benutzern als auch in Rollen definiert sein.

public class Users 
{ 
    public int Id { get; set; } 
    public string UserName { get; set; } 

    public virtual ICollection<Role> Roles{ get; set; } 
} 

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

    public virtual ICollection<User> Users{ get; set; } 
} 

Sie können auch die Vereinigung als Einheit explizit definieren, wenn Sie mehrere Attribute der Beziehung hinzufügen möchten:

public class UserRoles// Association table implemented as entity 
{ 
    public int UserId{ get; set; } 
    public virtual User User{ get; set; } 
    public int RoleId{ get; set; } 
    public virtual Role Role{ get; set; } 
    public DateTime AssignmentDate{ get; set; } 
} 

Sie können auch die Beziehung definieren explizit http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx

Schließlich Sie können auch DataAnnotions verwenden Create Foreign Key using Data Annotations

+0

Vielen Dank, aber meine Frage ist, warum Entity Framework Abfrage Generator Role_Id Spalte wh sucht Frage Entität? –

+0

Dies passiert, weil EF nicht versteht, dass RoleId ein Fremdschlüssel ist, also fügt er ein neues Fremdschlüsselfeld für Sie hinzu. Die EF-Konvention für die Benennung automatisch eingefügter Fremdschlüsselfelder lautet Tabellenname_Id. Dies ist genau das, was Sie sehen. Wenn Sie Ihren Klassendefinitionscode veröffentlichen, können wir Ihnen sagen, was falsch ist. – spadelives

Verwandte Themen