2012-06-05 2 views
3

Моя модель предметной области и ее ассоциации следующие:Поиск или создание объекта в Entity Framework

  • Customer имеет много Region s
  • Region имеет много Location сек

Наш клиент дает нам с CSV-файлом, который имеет следующие столбцы:

  • Имя клиента
  • Имя Регион
  • Название Расположение
    • Широта
    • Долгота
    • ...

Основываясь на этой информации, я должен найти или создать по имени, найти или создать регион по имени и, наконец, найти или обновить местоположение по имени.

Я попытался следующие:

var customer = from c in _data.Customer 
       where c.Name == cells[0] 
       select c; 

if (customer == null) 
    customer = new Customer(...); 

Я бы следовать той же схеме для поиска или создания/обновления региона и местоположения, однако, проблема я бегу в том, что тип запроса LINQ не может преобразуется в Customer -объект в строке customer = new customers();. Мне нужно ссылаться на этот объект customer, поэтому я не могу иметь две отдельные переменные.

Как бы это сделать в Entity Framework?

ответ

5

Этот код

var customer = from c in _data.Customer 
       where c.Name == cells[0] 
       select c; 

Возвращает все клиенты, которые имеют Name приравнивает cells[0] так возвращаемый тип будет IQueryable<Customer> не Сигле Customer (вот почему customer = new Customer(...) Безразлично» т).

Вам нужно позвонить по телефону FirstOrDefault или SingleOrDefault (в зависимости от ваших требований.) На нем, если вы хотите вернуть обратно Customer.

Так это должно работать

var customer = (from c in _data.Customer 
       where c.Name == cells[0] 
       select c).SingleOrDefault(); 
+0

Спасибо за быстрый ответ, который отлично работает! – Laurens

1

Попробуйте

var customer = (from c in _data.Customer 
       where c.Name == cells[0] 
       select c).FirstOrDefault(); 

if (customer == null) 
    customer = new Customer(...); 
+0

Если вам необходимо убедиться, что существует не более одной записи возвращается вы должны использовать SingelOrDefault вместо FirstOrDefault – TGH

+0

Спасибо за быстрый отклик! Это и получилось! :-) – Laurens

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