我是EF 4.1的新手,并尝试将一些代码从EF 4.1(代码优先)移到。这是一些背景知识。我正在为几家公司管理产品,所以我有一个表“Product”,其中有一个名为“Company”的列。我需要从包含给定公司产品的Excel文件中更新(插入,如果不存在,否则更新)此表(假设为C1)。这是我正在做的事情(使用专有的数据库访问代码和LINQ):
这很简单,但将其转换为EF 4.1似乎并不那么容易:
我可以轻松地从上下文中检索和过滤所有产品。我也可以在加载列表中轻松搜索Excel产品。如果不存在,我可以创建产品并将其添加到上下文中。但是如何模仿我的“缓存”系统,我将新添加的产品添加到我的内存中加载的产品列表中(Excel文件可以包含多次相同的产品)?当更改实体状态以及何时进行保存更改时?
基督教
答案 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();