0

我正在从逗号分隔值 (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 的不同客户并失败。

我怎样才能让实体框架也从它的上下文中进行选择,即使它可能还没有被持久化?

4

1 回答 1

2

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

于 2012-06-07T08:08:13.387 回答