я столкнулся в странном поведении Npgsql для Entity Framework Core:Entity Framework Ядро становится Внешняя Основные объекты не представляется возможным с Npgsql
Мои модели:
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; }
}
И мой 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);
}
}
Я успешно подключился к базе данных postgresql, и схема была создана с помощью «dotnet ef migrations add initPG» и «обновления сети dotnet ef» без проблем с righ т Внешняя ключ сдерживает-и т.д ..
Тогда я создать клиент:
var created = _context.Customers.Add(cust);
_context.SaveChanges();
С клиентом, содержащим адрес, адрес электронной почты и номер телефона.
Моя проблема, когда я хочу, чтобы все клиенты из БД с:
IEnumerable<Customer> customers = _context.Customers.ToList();
я только получите Заказчикам пустой адрес, электронная почта и свойства TelephoneNumber !!
У меня есть логическое недоразумение здесь !? Я бы подумал, что EF-Framework автоматически объединяет таблицу. Или мне нужно вручную самостоятельно получить отдельные элементы от клиента?
В нескольких источниках я вижу включает ключевое слово, чтобы получить ключ на иностранное свойство, но мой IDE показывает, что DbContext не имеет не включает метод на всех!
Нужно ли в ef использовать include для получения всех свойств внешнего ключа? – rubiktubik
@ rubiktubik Я, кажется, помню, что есть способ настроить это поведение, но это снизит производительность. Если вы должны знать, [поиск в google нашел меня на этот вопрос] (http://stackoverflow.com/questions/2967214/disable-lazy-loading-by-default-in-entity-framework-4) –
кажется, что ленивая загрузка еще не реализована в ef7, так что должен использоваться метод include – rubiktubik