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中获取它。我必须创建对象才能附加它。我认为创建一个列表并检查它会更快?是的,这是最简单的方法。。我也应该解决你的问题…是的,那会像你想的那样有效。。。