2017-07-11 2 views
0

Ich habe (kann nicht ändern) EF DataBase erstes Projekt ohne Navigationseigenschaft in Modellen.EntityFramework 6 DatabaseFirst hinzufügen Navigationseigenschaft aus Code

ich erweitern möchten automatisch generierten Modelle und fügen Sie Navigationseigenschaft

  1. generiert Modell
//generated.cs 

public partial class company 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
} 

public partial class user 
{ 
    public int id { get; set; } 
    public int company_id { get; set; } 
} 
  1. ich hinzufügen möchte Navigationseigenschaft von Code
//model_extension.cs 

public partial class user 
{ 
    public company Company { get; set; } 
} 

Ich habe eine Ausnahme "Der angegebene Typ member 'Company' wird in LINQ to Entities nicht unterstützt. Nur initializers Einheit Mitglieder und Navigationseigenschaften Einheit unterstützt.“

ich mit CodeFirst arbeiten vor.

Ich verstehe, muss ich einen Link user.company_id zu Unternehmen Aber nicht verstehen, wie dies mit Code machen (nicht Designer)

+0

Klingt, als ob Sie 'ICollection' benötigen:' public ICollection Firma {get; einstellen; } '. Sie können eine Modellklasse nicht direkt als Navigationseigenschaft definieren, ohne sie zuerst in eine unterstützte Sammlung zu integrieren. –

+0

Ich brauche Gesellschaft. Erhalten Sie alle Benutzer mit Firma - db.users.Include (x => x.Company) .ToList(). Aber ich will nicht ändern .edmx –

+0

Sie sollten Fremdschlüssel in Ihren Tabellen haben. DbFirst erstellt beim Generieren des Modells automatisch eine Navigationseigenschaft. – Aby

Antwort

1

In Datenbank Erste Annäherung, Sie erzeugen Ihre POCO-Objekte aus Datenbank Schema über Entity Framework Designer/ADO.NET Entity Data Model, so dass es als Code-First nicht flexibel ist, müssen Sie auf Datenbank gehen und das Schema selbst ändern und Ihre .edmx Datei aktualisieren. Das Hinzufügen von Eigenschaften zu diesen Modellen ist zwar in C# möglich, wird aber nicht zu Ihrer Datenbank hinzugefügt ema,

Ich schlage vor, dass Sie Ihr Datenbankschema umkehren und als Code-First Approach gehen, das nuget package kann dies für Sie tun.

Nach dem Umkehren geht es um Code-First, dann erstellen Sie Ihre eigenen DbContext und OnModelCreating und lassen Sie die Migration den Rest erledigen. Dann können Sie Eager Loading von EF verwenden, um Ihre Daten zu laden,

Verwandte Themen