Entify Framework:重用添加到已处置上下文中的实体是否合法

阿维·佩雷尔(Avi Perel)

假设我已经创建了一个实体框架entity1并将其添加到dbContext1中。然后,无论出于何种原因,我都要处理dbContext1并创建一个新的DbContext2。

现在可以通过将entity1添加到dbContext2来重用它吗?

EF版本为6.1.3。

public class DbSaver
{
    MyDbContext _context;

    public DbSaver()
    {
        MyDbContext _context = new MyDbEntities();
    }

    public void MustDoSave(/*whatever*/)
    {
        bool saved = false;

        MyEntity entity1 = new MyEntity() { /*setup entity field values here*/ };
        _context.Add(entity1);

        while (!saved)
        {
            try
            {
                _context.SaveChanges();
                saved = true;
            }
            catch
            {
                _context.Dispose();   // dispose the original context ("contextA)
                _context = new MyDbEntities(); // create a fresh one

                // the questionable part:
                _context.Add(entity1); // is it legal to now reuse an entity previously added to the old context ("contextB")??

                Thread.Sleep(1000); // wait before fresh retry
            }
        }
    }
}
佐兰·霍瓦(Zoran Horvat)

这是一个棘手的问题。如果更改被保留,则实体将填充身份字段。不要假设仅仅因为事务已经回滚而不会填充-这是DbContext该类的实现细节

因此,如果在DbContext假定新实体仍是新实体的情况下将其添加到新实体,即未填充其标识字段,则当您尝试第二次保留更改时可能会遇到麻烦。

我的建议是不要这样做,因为代码的正确性然后取决于Entity Framework的实现细节。不用说,将来实现可能会发生变化,然后您今天看起来运行良好的代码明天将停止工作。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Entify Framework 6 中添加 DBSet 时无法更新数据库消息

来自分类Dev

是否可以在上下文中将值添加到for循环中?

来自分类Dev

在实体框架中添加到上下文

来自分类Dev

在实体框架中在运行时将新模型添加到现有上下文中

来自分类Dev

是否需要处置实体框架上下文对象

来自分类Java

如何将用户信息添加到Sentry上下文中?

来自分类Dev

如何以编程方式将LinearLayout对象添加到我的上下文中?

来自分类Dev

如何列出添加到spark上下文中的spark-packages?

来自分类Dev

在异步上下文中添加到Dictionary时发生NullReferenceException

来自分类Dev

Java类两次添加到Mylyn上下文中

来自分类Dev

如何将计算变量添加到wagtail StructBlock模板上下文中?

来自分类Dev

将多个mongoTemplates添加到servlet上下文中

来自分类Dev

在PyQt中将python类添加到Web Worker的上下文中

来自分类Dev

将对象添加到实体框架上下文大约需要1.5秒

来自分类Dev

将实体添加到上下文时,将GUID保留为空

来自分类Dev

无法将对象添加到列表中,当前上下文中不存在添加

来自分类Dev

在GWT中将javascript添加到uiBinder类中,以便在上下文中使用PaypalExpressCheckout

来自分类Dev

将父对象保存到上下文中时,将子对象添加到表中

来自分类Dev

Firebase + react:读取身份验证状态更改的文档并将其添加到上下文中

来自分类Dev

我们是否必须显式添加到数据库上下文?

来自分类Dev

是否有将上下文名称添加到 snmp 代理的正确格式?

来自分类Dev

检查上下文是否有一些表然后添加到这个表

来自分类Dev

添加到上下文菜单

来自分类Dev

g从抽象子类添加到上下文

来自分类Dev

将上下文菜单添加到.exe文件

来自分类Dev

在将列添加到数据库后,为什么我的实体框架上下文未更新?

来自分类Dev

如何在不传递上下文的情况下读取添加到DbContext的实体

来自分类Dev

在同一上下文中添加对象时,实体框架不会返回代理

来自分类Dev

将所有对象添加到上下文后,是否应该调用context.SaveChanges()?

Related 相关文章

  1. 1

    在 Entify Framework 6 中添加 DBSet 时无法更新数据库消息

  2. 2

    是否可以在上下文中将值添加到for循环中?

  3. 3

    在实体框架中添加到上下文

  4. 4

    在实体框架中在运行时将新模型添加到现有上下文中

  5. 5

    是否需要处置实体框架上下文对象

  6. 6

    如何将用户信息添加到Sentry上下文中?

  7. 7

    如何以编程方式将LinearLayout对象添加到我的上下文中?

  8. 8

    如何列出添加到spark上下文中的spark-packages?

  9. 9

    在异步上下文中添加到Dictionary时发生NullReferenceException

  10. 10

    Java类两次添加到Mylyn上下文中

  11. 11

    如何将计算变量添加到wagtail StructBlock模板上下文中?

  12. 12

    将多个mongoTemplates添加到servlet上下文中

  13. 13

    在PyQt中将python类添加到Web Worker的上下文中

  14. 14

    将对象添加到实体框架上下文大约需要1.5秒

  15. 15

    将实体添加到上下文时,将GUID保留为空

  16. 16

    无法将对象添加到列表中,当前上下文中不存在添加

  17. 17

    在GWT中将javascript添加到uiBinder类中,以便在上下文中使用PaypalExpressCheckout

  18. 18

    将父对象保存到上下文中时,将子对象添加到表中

  19. 19

    Firebase + react:读取身份验证状态更改的文档并将其添加到上下文中

  20. 20

    我们是否必须显式添加到数据库上下文?

  21. 21

    是否有将上下文名称添加到 snmp 代理的正确格式?

  22. 22

    检查上下文是否有一些表然后添加到这个表

  23. 23

    添加到上下文菜单

  24. 24

    g从抽象子类添加到上下文

  25. 25

    将上下文菜单添加到.exe文件

  26. 26

    在将列添加到数据库后,为什么我的实体框架上下文未更新?

  27. 27

    如何在不传递上下文的情况下读取添加到DbContext的实体

  28. 28

    在同一上下文中添加对象时,实体框架不会返回代理

  29. 29

    将所有对象添加到上下文后,是否应该调用context.SaveChanges()?

热门标签

归档