2011-09-12 123 views
1

我是EF 4.1的新手,尝试将一些代码从EF 4.1(代码优先)中移出。这是一些背景。我正在管理几家公司的产品,所以我有一个名为“公司”的栏目“产品”表。我需要从包含给定公司产品的Excel文件更新(如果不存在,则更新)(如C1)。下面是我在做什么(使用专有的数据库访问代码和LINQ):使用实体框架从Excel更新数据库4.1

  • 检索所有产品,为公司的C1的产品列表
  • 对于每个产品出现在Excel:
    • 搜索
    • 创造新的产品实例
    • 增加产品数据库
    • 012:如果从Excel的产品。如果产品不存在,那么已经
    • 存在加载的产品列表
    • 增加产品所装载的产品 否则列表

这很简单,但将其转换为EF 4.1似乎在数据库

  • 更新产品不那么容易:

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

    基督教

  • 回答

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

    这个“本地”属性正是我一直在寻找的。完美! – Christian

    相关问题