Обновление БД из Excel с Entity Framework 4.1 - PullRequest
1 голос
/ 12 сентября 2011

Я новичок в EF 4.1 и пытаюсь переместить некоторый код из EF 4.1 (сначала код). Вот немного фона. Я управляю продуктами для нескольких компаний, поэтому у меня есть таблица «Продукт» со столбцом «Компания». Мне нужно обновить (вставить, если не существует, иначе обновить) эту таблицу из файла Excel, содержащего продукты для данной компании (скажем, C1). Вот что я делаю (используя собственный код доступа к БД и LINQ):

  • Получить все продукты для компании C1 в виде списка продуктов
  • Для каждого продукта, отображаемого в Excel:
    • Поиск в загруженном списке продуктов, если продукт из Excel уже существует
    • Если товара не существует, то:
    • создать новый экземпляр продукта
    • добавить товар в базу данных
    • добавить товар в список загруженных товаров Else
    • обновить продукт в базе данных

Это довольно просто, но конвертировать его в EF 4.1 не так просто:

Я могу легко получить и отфильтровать все продукты из контекста. Я также могу легко найти продукт Excel в загруженном списке. Если нет, я могу создать продукт и добавить его в контекст. Но как имитировать мою систему «кэширования», в которой я добавляю недавно добавленный продукт в список товаров, загруженных в память (файл Excel может содержать несколько раз один и тот же продукт)? Также, когда изменяется состояние объекта, а когда нужно делать изменения?

Christian

1 Ответ

0 голосов
/ 12 сентября 2011

Вот примерный план того, как вы можете это сделать.

EF кэширует загруженные объекты.Вы можете использовать свойство Local для доступа к нему.Эта коллекция будет изменена EF при добавлении новых объектов.

context.Products.Where(p => p.Company == "C1").ToList();//force EF to load products

while(/*loop through excel file)
{
  var product = context.Products.Local.Where(p=> p.Id == excelProductId);
  if (product == null)
  {
     //insert
  }
  else
  {
    /update
  }
}

context.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...