C# 实体框架中的上下文选择
我正在从逗号分隔值(CSV)文档中读取数据,并将其内容保存到数据库中。CSV文件中的每一行包含以下列: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(); 如果不存
- 客户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
属性计算出来的,这似乎做得足够好了。无论如何谢谢你!