从实体框架中的上下文中进行选择

时间:2012-06-07 07:51:41

标签: c# entity-framework

我正在从逗号分隔值(CSV)文档中读取数据并将其内容保存到数据库中。 CSV文件中的每一行都包含以下列:

  • 客户ID
  • 纬度
  • 经度

我们的域名模型如下:

  • Customer有很多Locations
  • Location
    • 纬度
    • 经度

对于每一行,我正在阅读Customer ID并在数据库中查找:

var customer = (from c in Context.Customer
                where c.ID == id
                select c).SingleOrDefault();

如果它不存在,我创建一个:

if (customer == null)
{
    customer = new customers();
    customer.ID = id;
}

此时我不保存。接下来,我创建一个新的Location,并设置其客户。请注意,此客户可能尚未真正进入数据库。

现在考虑以下事项:如果客户尚未加入数据库,我会创建一个。但是我还没保存。现在下一行属于我刚刚创建的同一个客户,它还没有在数据库中。因此,它将创建另一个客户。

当需要将图表保存到数据库时,它会尝试使用相同的ID保存两个不同的客户并失败。

如何让Entity Framework也从其上下文中选择,即使它可能还没有持久化?

1 个答案:

答案 0 :(得分:2)

首先,您必须将新创建的实体附加到上下文实例。 其次,如果您使用的是Code First,则可以使用DbSet.Find方法 - 它可以搜索未在商店中保存但已附加到上下文的实体,而不会对商店执行查询。