Как добавить дополнительные навигационные свойства, которые не будут сохранены? - PullRequest
2 голосов
/ 16 марта 2020

У меня есть следующая модель:

public class Order
{
    public int Id { get; set; }
    public ItemType ItemType { get; set; }
    public int ItemId { get; set; }
}

public enum ItemType
{
    Customer, Organization, Department, //etc
}

ItemId - это чужой ключ к отдельной модели / таблице. Приведенная выше модель сопоставляется как есть с базовой таблицей.

Теперь я хотел бы автоматически загружать связанные объекты при загрузке Order.

. Возможно ли это при использовании составных внешних ключей при сопоставлении, например:

public class Order
{
    public int Id { get; set; }
    public ItemType ItemType { get; set; }
    public int ItemId { get; set; }
    public ItemTypeCustomer => ItemType.Customer;
    public ItemTypeOrganization => ItemType.Organization;
    public ItemTypeDeparment => ItemType.Department;
    public Customer Customer { get; set; }
    public Organization Organization { get; set; }
    public Department Department { get; set; }
}

modelBuilder.Entity<Order>()
   .HasOptional(p => p.Customer)
   .WithMany()
   .HasForeignKey(p => new { p.ItemTypeCustomer , p.ItemId });

Будет ли работать выше? Можно ли построить что-то подобное, используя сначала код?

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

`использование Microsoft.EntityFrameworkCore;

publi c IEnumerable GetCandidates () {return context.Orders.Include (C => C .ItemType); } '

0 голосов
/ 20 марта 2020

Если вам просто нужно загрузить записи из таблицы с некоторыми связанными данными, вам нужно использовать метод Include.

using (var context = new YourContext())
{
    var ordersWithItemType = context.Orders
                                    .Include(order => order.ItemType) // Here, EF automaticly join related table by foreign key
                                    .ToList();
}

Подробнее см. docs .

...