2013-12-13 2 views
1

У меня есть Клиент и . Заказать. Таблица заказов содержит поле CustomerId, которое указывает на Customer.Id. Я получение Заказа с помощью следующейОбъект навигации - null; Зачем?

var order = (from a in context.Order 
where a.id == OrderId select a).FirstOrDefault(); 

Существует еще один аудита таблицы, которая имеет столбец CUSTOMERID также. Я создаю запись в таблице аудита и хочу обновить CustomerId из запроса, полученного из запроса выше, однако, order.customer object имеет значение null. Что я делаю не так?

+0

Уверены, что есть заказ с id == OrderId в контексте.Order? – Valin

+0

Проверьте значение 'OrderId' и убедитесь, что на самом деле есть заказ с идентификатором, указанным' OrderId'. Сделайте вторую часть с помощью инструмента базы данных, а не сущности. –

+0

Вы просто позволяете EF делать это, используя DataAnnotations или FluentAPI? – joelmdev

ответ

3

Я предполагаю, что есть свойство навигации Customer на вашем объекте Order с полем CustomerID. Вам нужно будет ввести нагрузку на объект Customer, используя функцию Include.

var order = (from a in context.Order.Include("Customer") 
where a.id == OrderId select a).FirstOrDefault(); 

// Check if the result is null 
if(order != null) 
{ 
    /// Do stuff... 
} 
0

Вот решение:

var order = (from a in context.Order 
where a.id == OrderId select a).FirstOrDefault(); 
var customer = context.Customer.Find(order.CustomerId); 
+0

Этот ответ будет работать, но его две поездки в базу данных. – paqogomez

3

Чтобы включить ваши данные клиента вы должны включить в таблицу, как этот код, приведенный ниже.

var order = (from a in context.Order 
      where a.id == OrderId select a) 
            .Include(b => b.Customer) 
            .FirstOrDefault(); 

Для этого необходимо установить связь между Заказчиком и Заказчиком.

+0

+1. Если он все равно возвращает «null», вам лучше проверить сами объекты. Помните, что 'FirstOrDefault()' возвращает 'null', если ничего не найдено. – Tico

+0

На самом деле Include не является вариантом, где вы разместили синтаксис выше. Однако я могу использовать Include after context.Order как @DaveB, предложенный в его ответе. –

Смежные вопросы