使用Entity Framework 4.1从Excel更新数据库

时间:2011-09-12 09:41:29

标签: entity-framework-4

我是EF 4.1的新手,并尝试将一些代码从EF 4.1(代码优先)移到。这是一些背景知识。我正在为几家公司管理产品,所以我有一个表“Product”,其中有一个名为“Company”的列。我需要从包含给定公司产品的Excel文件中更新(插入,如果不存在,否则更新)此表(假设为C1)。这是我正在做的事情(使用专有的数据库访问代码和LINQ):

  • 检索公司C1的所有产品作为产品列表
  • 对于Excel中出现的每个产品:
    • 如果Excel中的产品已存在,则搜索已加载的产品列表
    • 如果产品不存在,则:
    • 创建新产品实例
    • 将产品添加到数据库
    • 将产品添加到已加载产品列表中 其他
    • 更新数据库中的产品

这很简单,但将其转换为EF 4.1似乎并不那么容易:

我可以轻松地从上下文中检索和过滤所有产品。我也可以在加载列表中轻松搜索Excel产品。如果不存在,我可以创建产品并将其添加到上下文中。但是如何模仿我的“缓存”系统,我将新添加的产品添加到我的内存中加载的产品列表中(Excel文件可以包含多次相同的产品)?当更改实体状态以及何时进行保存更改时?

基督教

1 个答案:

答案 0 :(得分:0)

以下是如何做到这一点的大致概述。

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();