2016-07-26 19 views
-1

Ich habe in einem fremden Verhalten von Npgsql für Entity Framework-Core aufgetreten:Entity Framework-Core bekommen Forein Key Einheiten nicht möglich, mit Npgsql

Meine Models:

public class Customer 
{ 
    public Customer() 
    { 
     Numbers = new List<TelephoneNumber>(); 
     Emails = new List<Email>(); 
    } 
    public int CustomerId { get; set; } 
    public string FirstName { get; set; } 
    public string SecondName { get; set; } 

    public Address Address { get; set; } 

    public List<TelephoneNumber> Numbers {get;set;} 

    public List<Email> Emails { get; set; } 

    public string Note { get; set; } 
} 

public class Address 
{ 
    public int AddressId { get; set; } 
    public string Street { get; set; } 
    public int HouseNumber { get; set; } 

    public int Code { get; set; } 

    public string City { get; set; } 

    public int CustomerId { get; set; } 
    public Customer Customer { get; set; } 
} 

public class Email 
{ 
    public int EmailId { get; set; } 

    public string Address { get; set; } 

    public int CustomerId { get; set; } 
    public Customer Customer { get; set; } 
} 

public class TelephoneNumber 
{ 
    public int TelephoneNumberId { get; set; } 

    public string Number { get; set; } 

    public int CustomerId { get; set; } 
    public Customer Customer { get; set; } 
} 

Und mein DbContext:

public class CustomerContext : DbContext 
{ 
    public CustomerContext(DbContextOptions<CustomerContext> options) : base(options) 
    {} 
    public DbSet<Customer> Customers {get; set;} 
    public DbSet<Address> Addresses { get; set; } 

    public DbSet<Email> Emails {get;set;} 
    public DbSet<TelephoneNumber> Numbers {get;set;} 

    protected override void OnModelCreating(ModelBuilder builder) 
    { 
     builder.Entity<Customer>().HasKey(m => m.CustomerId); 
     builder.Entity<Address>().HasKey(m => m.AddressId); 
     builder.Entity<Email>().HasKey(m => m.EmailId); 
     builder.Entity<TelephoneNumber>().HasKey(m => m.TelephoneNumberId); 

     base.OnModelCreating(builder); 
    } 
} 

Ich habe erfolgreich mit der postgresql-Datenbank verbunden und das Schema wird mit "dotnet ef Migrationen hinzufügen initPG" und "dotnet ef Datenbankupdate" ohne Probleme mit richtig erstellt t forein Schlüssel Constraints-etc ..

Dann erstelle ich einen Kunden mit:

var created = _context.Customers.Add(cust); 
_context.SaveChanges(); 

Mit Kunden, die eine Adresse, E-Mail und Telefonnummer.

Mein Problem ist, wenn ich mit allen Kunden aus der DB erhalten mag:

IEnumerable<Customer> customers = _context.Customers.ToList(); 

ich nur Kunden mit leerer Adresse, Email und Telefon Eigenschaften !!

Habe ich hier ein logisches Missverständnis !? Ich würde denken, dass das EF-Framework die Tabelle automatisch verbindet. Oder muss ich manuell diese separaten Elemente vom Kunden selbst holen?

An mehreren Quellen Ich sehe die Schlüsselwort enthalten die forein-Schlüsseleigenschaften, aber meine IDE zeigt zu bekommen, dass die DbContext überhaupt keine umfassen Methode hat!

Antwort

2

, wenn Sie die include Erweiterungsmethoden, Typ

using System.Data.Entity; 

Oder, wenn mit EF 7, wie pro rubiktubik ‚s Vorschlag

using Microsoft.EntityFrameworkCore 

am Anfang der Datei

An diesem Punkt sollten Sie

tun können 10
+0

Ist es notwendig, Include zu verwenden, um alle Fremdschlüsseleigenschaften zu erhalten? – rubiktubik

+0

@rubiktubik Ich erinnere mich, dass es eine Möglichkeit gibt, dieses Verhalten zu konfigurieren, aber es wird die Leistung verringern. Wenn Sie wissen müssen, [Eine Google-Suche brachte mich zu dieser Frage] (http://stackoverflow.com/questions/2967214/disable-lazy-loading-by-default-in-entity-framework-4) –

+0

scheint es so Lazy Loading ist in ef7 noch nicht implementiert, so dass die Include-Methode verwendet werden muss. – rubiktubik