Entity framework 4 使用实体框架4.1从Excel更新数据库

Entity framework 4 使用实体框架4.1从Excel更新数据库,entity-framework-4,Entity Framework 4,我是EF4.1新手,尝试将一些代码从EF 4.1迁移到EF 4.1(代码优先)。以下是一些背景。我为几家公司管理产品,所以我有一个表“Product”,其中有一列名为“Company”。我需要从包含给定公司(比如C1)产品的Excel文件中更新(如果不存在,则插入,否则更新)此表。下面是我正在做的事情(使用专有的db访问代码和LINQ): 检索公司C1的所有产品作为产品列表 对于Excel中显示的每个产品: 如果Excel中的产品已存在,则搜索已加载的产品列表 如果产品不存在,则: 创建新产

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

  • 检索公司C1的所有产品作为产品列表
  • 对于Excel中显示的每个产品:
    • 如果Excel中的产品已存在,则搜索已加载的产品列表
    • 如果产品不存在,则:
    • 创建新产品实例
    • 将产品添加到数据库
    • 将产品添加到加载的产品列表中 否则
    • 更新数据库中的产品
这非常简单,但将其转换为EF 4.1似乎并不容易:

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


Christian

以下是你如何做到这一点的粗略概述

EF缓存加载的实体。您可以使用属性来访问它。添加新实体时,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();
这个“本地”房产正是我一直在寻找的。完美的