Заявление с использованием EF Core для нескольких таблиц с одинаковым FK - PullRequest
1 голос
/ 28 января 2020

Я не уверен, почему я получаю нулевые значения для пользователей в PurchaseOrderHistory в приведенном ниже коде. Я думаю, что это связано с PurchaseOrder также содержит идентификатор пользователя. Чего я не понимаю, так это того, что если UserID совпадает для PurchaseOrder и PurchaseOrderHistory, то он появится. Я приложил отрывки для пояснения.

var purchaseOrder = await _context.PurchaseOrder
            .Include(p => p.Division)
            .Include(p => p.PaymentType)
            .Include(p => p.Status)
            .Include(p => p.Vendor)
            .Include(p => p.ItemServiceLine)
            .Include(p => p.PurchaseOrderHistory)
            .Include(p => p.User)
            .FirstOrDefaultAsync(m => m.ID == id);

Снимок пользователя PurchaseOrder

Снимок пользователя PurchaseOrderHistory

Ответы [ 2 ]

1 голос
/ 28 января 2020

Вы включаете PurchaseOrder User, а не PurchaseOrderHistory. Если оба идентификатора пользователя совпадают, исправление взаимосвязи также заполнит PurchaseOrderHistory User, поскольку оно привязано к контексту.

Что вы намеревались сделать:

var purchaseOrder = await _context.PurchaseOrder
            .Include(p => p.Division)
            .Include(p => p.PaymentType)
            .Include(p => p.Status)
            .Include(p => p.Vendor)
            .Include(p => p.ItemServiceLine)
            .Include(p => p.User)
            .Include(p => p.PurchaseOrderHistory)
                .ThenInclude(poh => poh.User)
            .FirstOrDefaultAsync(m => m.ID == id);
1 голос
/ 28 января 2020

Чего я не понимаю, так это того, что если идентификатор UserID для PurchaseOrder и PurchaseOrderHistory одинаков, то он появится.

Если в трекере изменений уже есть объект User, идентификатор пользователя которого совпадает с PurchaseOrderHistory.UserID, он "исправит" свойство навигации.

...