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!
Ist es notwendig, Include zu verwenden, um alle Fremdschlüsseleigenschaften zu erhalten? – rubiktubik
@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) –
scheint es so Lazy Loading ist in ef7 noch nicht implementiert, so dass die Include-Methode verwendet werden muss. – rubiktubik