C# 实体框架中的上下文选择

C# 实体框架中的上下文选择,c#,entity-framework,C#,Entity Framework,我正在从逗号分隔值(CSV)文档中读取数据,并将其内容保存到数据库中。CSV文件中的每一行包含以下列: 客户ID 纬度 经度 我们的域模型如下所示: 客户有许多位置 位置 纬度 经度 对于每一行,我都在读取客户ID,并在数据库中查找: var customer = (from c in Context.Customer where c.ID == id select c).SingleOrDefault(); 如果不存

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

  • 客户ID
  • 纬度
  • 经度
我们的域模型如下所示:

  • 客户
    有许多
    位置
  • 位置
    • 纬度
    • 经度
对于每一行,我都在读取
客户ID
,并在数据库中查找:

var customer = (from c in Context.Customer
                where c.ID == id
                select c).SingleOrDefault();
如果不存在,我将创建一个:

if (customer == null)
{
    customer = new customers();
    customer.ID = id;
}
我现在不保存它。接下来,我创建一个新的
位置
,并设置其客户。请注意,该客户可能还没有实际存在于数据库中

现在考虑以下内容:如果客户还没有在数据库中,我创建一个。但我还没有保存它。现在,下一行属于我刚才创建的同一个客户,它还不在数据库中。因此,它将创建另一个客户

当将图形保存到数据库时,它将尝试保存两个具有相同ID的不同客户,但失败


如何让实体框架也从其上下文中选择内容,即使它可能尚未持久化?

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

这是您代码的完整示例吗?创建后是否将新的
Customer
附加到上下文?你是先使用代码的DbContext还是ObjectContext?天哪,我不是!我会做出适当的改变,并让你知道它是否可行。感谢您的迅速回复!“查找”方法似乎只对主键起作用。有没有办法让它也在非主键上运行?没有。我想原因是PK搜索对于实现来说是微不足道的(字典帮助),而对于其他属性来说则不是这样。你想用它做什么?在您的代码示例中,您正在按主键搜索客户。为了简洁起见,我没有发布完整的代码示例,但我还有一个案例需要按名称搜索。在任何情况下,我都是使用
DbSet
上的
Local
属性计算出来的,这似乎做得足够好了。无论如何谢谢你!