C# 如何在EF上下文中保存对象并检查其是否存在,而不将其保存到数据库?
我正在尝试填充数据库上下文,然后在循环结束时保存所有更改:C# 如何在EF上下文中保存对象并检查其是否存在,而不将其保存到数据库?,c#,entity-framework,C#,Entity Framework,我正在尝试填充数据库上下文,然后在循环结束时保存所有更改: foreach (var kommune in valgkreds.Value.SubAreas) { var komExist = dbConnection.Omraade.FirstOrDefault(x => x.Id == kommune.Value.Id); if (komExis
foreach (var kommune in valgkreds.Value.SubAreas)
{
var komExist = dbConnection.Omraade.FirstOrDefault(x => x.Id == kommune.Value.Id);
if (komExist == null)
{
Omraade k = new Omraade();
k.Id = kommune.Value.Id;
k.titel = kommune.Value.Name;
k.type_id = 3;
dbConnection.Omraade.Add(k);
Krydstabel_Omraade ko_kommune = new Krydstabel_Omraade();
ko_kommune.parent = valgkreds.Value.Id;
ko_kommune.child = kommune.Value.Id;
dbConnection.Krydstabel_Omraade.Add(ko_kommune);
Console.WriteLine(k.Id);
//Console.WriteLine(++i);
}
}
我正在检查是否已使用以下行将对象添加到上下文中:
var komExist = dbConnection.Omraade.FirstOrDefault(x => x.Id == kommune.Value.Id);
它始终返回
null
,即使已添加对象。我猜这是因为它还没有被保存到数据库中。在执行SaveChanges()
方法之前,如何检查它是否在上下文中?如果您使用的是EF 4.1+,它们包含一个“查找”方法,允许您跟踪上下文中尚未持久化到数据库的对象-
尽管看起来只有在使用主键进行搜索时,此方法才有效。如果使用EF 4.1+,它们包含了一个“查找”方法,允许您跟踪上下文中尚未持久化到数据库的对象-
尽管看起来只有在使用主键进行搜索时,这才有效。U可以通过使用EDM的Attach()方法将对象附加到上下文进行检查。如果它已经存在,那么它将抛出一个exceptionFirstOrDefault()将不起作用,因为它将从DBI中获取它。我必须创建对象才能附加它。我认为创建一个列表并检查它会更快?是的,这是最简单的方法。。这应该也能解决你的问题。是的,这会像你想的那样工作。你可以通过使用EDM的Attach()方法将对象附加到上下文进行检查。如果它已经存在,那么它将抛出一个exceptionFirstOrDefault()将不起作用,因为它将从DBI中获取它。我必须创建对象才能附加它。我认为创建一个列表并检查它会更快?是的,这是最简单的方法。。我也应该解决你的问题…是的,那会像你想的那样有效。。。