Is it possible to query Entity Framework before calling DbContext.SaveChanges?

JKasper11

In this simple example, I have two entities: Event and Address. I have a console application running every night to import event data from an XML source and add it to my database.

As I loop through the XML event nodes (inside of the Entity Framework context), I check to see if there is an address record with the given values already in the database. If not, it adds a new record.

using (DemoContext context = new DemoContext())
{
    foreach (XmlNode eventNode in eventsXml.SelectNodes("/Events/Event"))
    {
        Event newEvent = new Event();

        newEvent.Title = **get from XML**

        Address address = context.Addresses.Where(a =>
            a.Title.Equals(title, StringComparison.OrdinalIgnoreCase) &&
            a.Address1.Equals(address1, StringComparison.OrdinalIgnoreCase) &&
            a.Address2.Equals(address2, StringComparison.OrdinalIgnoreCase) &&
            a.City.Equals(city, StringComparison.OrdinalIgnoreCase) &&
            a.State.Equals(state, StringComparison.OrdinalIgnoreCase) &&
            a.ZipCode.Equals(zipCode, StringComparison.OrdinalIgnoreCase)
        ).FirstOrDefault();

        if (address != null)
            newEvent.Location = address;
        else
        {
            newEvent.Location.Title = title;
            newEvent.Location.Address1 = address1;
            newEvent.Location.Address2 = address2;
            newEvent.Location.City = city;
            newEvent.Location.State = state;
            newEvent.Location.ZipCode = zipCode;
        }

        context.Events.Add(newEvent);
    }

    context.SaveChanges();
}

I know it is slower performance to call context.SaveChanges() after every event, so I would like to do this all at the end (or do it in batches but that's not relevant to this problem). However, when I query against context.Addresses, it doesn't seem to be aware of any new addresses until after I call context.SaveChanges() so I get duplicate records.

For my purposes it may be okay to save after each record rather than at the end, but I would like to know if there is a good, simple alternative.

Alireza

When you query in a way that the database is touched, then the newly added entities in the context are not included in the result. In EF 4.1 you can get them via DbSet<T>.Local

See :

Why do Entity Framework queries not return unsaved entities

And

Entity Framework: Re-finding objects recently added to context

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将 DbContext.SaveChanges 异常记录到 Entity Framework/Entity Framework Core 中的数据库

来自分类Dev

覆盖Entity Framework 5中的SaveChanges

来自分类Dev

在EntityObject的扩展部分内的Entity Framework SaveChanges

来自分类Dev

DbContext SaveChanges不可预测

来自分类Dev

在事务中使用DbContext SaveChanges

来自分类Dev

Entity Framework Query for Complex Sql

来自分类Dev

在Entity Framework Core中创建迁移时,如何配置DbContext?

来自分类Dev

在Entity Framework中使用DbContext运行异步调用

来自分类Dev

如何使用Entity Framework 6创建内存DbContext?

来自分类Dev

在foreach循环中对Entity Framework DbContext使用using语句

来自分类Dev

无法迁移 Entity Framework Core 中的 DbContext 类

来自分类Dev

带有单个和多个SaveChanges()调用的Entity Framework(6)事务之间有什么区别

来自分类Dev

我应该在每次更改后一次还是单独调用Entity Framework SaveChanges

来自分类Dev

如何更改 DbContext.SaveChanges() 的条目值

来自分类Dev

Does Entity Framework perform lambda expressions before or after it fetches the data?

来自分类Dev

如何使用存储库模式伪造Entity Framework中的DbContext.Entry方法

来自分类Dev

将INotifyPropertyChanged与Entity Framework 6 DbContext Generator一起使用

来自分类Dev

使用不同的数据库在Entity Framework Code First(DbContext)上进行调试和发布

来自分类Dev

如何在Entity Framework Core中用多个DbSet属性名称支持DbContext?

来自分类Dev

我的上下文未从Entity Framework Core中的DbContext继承

来自分类Dev

如何将存储过程添加到Entity Framework Core DbContext?

来自分类Dev

Dotnet Core控制台应用程序中的Entity Framework Core DbContext生命周期

来自分类Dev

Entity Framework 6.2.0 - 自动保存哪个用户创建或更新了 DbSet 值的 DbContext

来自分类Dev

获取删除的行数和DbContext.SaveChanges()编辑的行数

来自分类Dev

是否可以在调用DbContext.SaveChanges之前查询实体框架?

来自分类Dev

DbContext.SaveChanges()未更新数据库

来自分类Dev

如何在模型中重写DBContext.SaveChanges()

来自分类Dev

dbcontext.savechanges始终保存默认值

来自分类Dev

实体框架6 EntityDataSource在DbContext中未调用SaveChanges

Related 相关文章

  1. 1

    将 DbContext.SaveChanges 异常记录到 Entity Framework/Entity Framework Core 中的数据库

  2. 2

    覆盖Entity Framework 5中的SaveChanges

  3. 3

    在EntityObject的扩展部分内的Entity Framework SaveChanges

  4. 4

    DbContext SaveChanges不可预测

  5. 5

    在事务中使用DbContext SaveChanges

  6. 6

    Entity Framework Query for Complex Sql

  7. 7

    在Entity Framework Core中创建迁移时,如何配置DbContext?

  8. 8

    在Entity Framework中使用DbContext运行异步调用

  9. 9

    如何使用Entity Framework 6创建内存DbContext?

  10. 10

    在foreach循环中对Entity Framework DbContext使用using语句

  11. 11

    无法迁移 Entity Framework Core 中的 DbContext 类

  12. 12

    带有单个和多个SaveChanges()调用的Entity Framework(6)事务之间有什么区别

  13. 13

    我应该在每次更改后一次还是单独调用Entity Framework SaveChanges

  14. 14

    如何更改 DbContext.SaveChanges() 的条目值

  15. 15

    Does Entity Framework perform lambda expressions before or after it fetches the data?

  16. 16

    如何使用存储库模式伪造Entity Framework中的DbContext.Entry方法

  17. 17

    将INotifyPropertyChanged与Entity Framework 6 DbContext Generator一起使用

  18. 18

    使用不同的数据库在Entity Framework Code First(DbContext)上进行调试和发布

  19. 19

    如何在Entity Framework Core中用多个DbSet属性名称支持DbContext?

  20. 20

    我的上下文未从Entity Framework Core中的DbContext继承

  21. 21

    如何将存储过程添加到Entity Framework Core DbContext?

  22. 22

    Dotnet Core控制台应用程序中的Entity Framework Core DbContext生命周期

  23. 23

    Entity Framework 6.2.0 - 自动保存哪个用户创建或更新了 DbSet 值的 DbContext

  24. 24

    获取删除的行数和DbContext.SaveChanges()编辑的行数

  25. 25

    是否可以在调用DbContext.SaveChanges之前查询实体框架?

  26. 26

    DbContext.SaveChanges()未更新数据库

  27. 27

    如何在模型中重写DBContext.SaveChanges()

  28. 28

    dbcontext.savechanges始终保存默认值

  29. 29

    实体框架6 EntityDataSource在DbContext中未调用SaveChanges

热门标签

归档