将同一对象附加到Entity Framework 6中的不同上下文

用户名

从我读到的所有内容开始,应该不可能将同一对象附加到不同的dbcontext(并且在这种情况下,我能找到的所有示例和问题都显示出异常)。现在,当我使用EF6进行测试时,它使我可以将同一对象附加到不同的上下文(来自不同的线程);我什至能够从一个线程更改对象并保存到另一个线程。这不一定是一件坏事(除了我必须确保始终锁定并且没有抛出异常的事实外),只是我想了解发生了什么。

有人知道这真的是EF6中的“新功能”吗?

一些代码在这里。从几个不同的线程调用此操作不会引起异常,并且如果我在保存之前从另一个线程更改了对象,它将采用最后一个值:

                        using (var db = new TestContext())
                        {
                            db.Users.Attach(_cachedUser);
                            MessageBox.Show("attached"); //I use this to pause the thread as long as I want
                            _cachedUser.UserCode = tbCode.Text;
                            _cachedUser.UserDesc = tbDesc.Text;
                            MessageBox.Show("ready to save"); //pause again
                            db.SaveChanges();
                        }

编辑在收到导致这种情况的答案之后,我还找到了如何检查对象是否是代理的方法:http : //msdn.microsoft.com/zh-cn/library/vstudio/ee835846(v=vs.100)。 aspx

public static bool IsProxy(object type)
{
    return type != null && ObjectContext.GetObjectType(type.GetType()) != type.GetType();
}

效果很好。

格特·阿诺德

自从Entity Framework引入代码优先样式以来,这已经成为可能,因为您只能使用POCO做到这一点。

cachedUser是一个普通的C#类。它没有关于它所附加的上下文的任何信息。同样,新的上下文实例不了解其他上下文的变更跟踪器。因此,无法检查POCO是否已附加到任何地方的上下文中。

cachedUser不是POCO而是代理对象时,这种情况会改变(代理对象是EF动态创建的对象。它从实体类继承,并且包含启用延迟加载并促进更改跟踪的代码和状态)。当您尝试将代理对象附加到第二个上下文时,将出现异常:

IEntityChangeTracker的多个实例不能引用一个实体对象。

这就是为什么在许多情况下建议创建代理而不是POCO的原因。您可以db.Users.Create()代替使用来创建代理new User()

何时创建代理,这是否完全可能以及EF物化代理何时成为超出此问题范围的主题。有关此的更多信息,请参见此处

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将同一对象存储在不同的数组中

来自分类Dev

将同一对象添加到不同的nsmutablearray内存效果

来自分类Dev

在Entity Framework 6中使用来自多个线程的单个上下文

来自分类Dev

将对象列表添加到Entity Framework中的数据库上下文

来自分类Dev

来自WCF数据服务的Entity Framework 6数据上下文

来自分类Dev

使用Entity Framework 6的多个上下文,跨dbcontexts引用了多个实体

来自分类Dev

共享数据上下文/注入依赖项Entity Framework 6代码优先

来自分类Dev

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

来自分类Dev

从Entity Framework Core中的cookie和基本路径创建数据库上下文

来自分类Dev

Angular 5 - 从 FormGroup 创建对象数组会将同一对象推送到我的数组中

来自分类Dev

使用多个Entity Framework上下文并行查询

来自分类Dev

尝试模拟Entity Framework上下文时抛出TargetInvocationException

来自分类Dev

Python将对象添加到同一对象方法中的列表

来自分类Dev

实体框架不会将数据库上下文中仍然存在的对象与从不同类引用的同一对象相关联

来自分类Dev

Entity Framework Core 腳手架附加表而不是上下文

来自分类Dev

在带有Entity Framework的ASP.NET MVC中,在此上下文中仅支持原始类型或枚举类型

来自分类Dev

在带有Entity Framework的ASP.NET MVC中,在此上下文中仅支持原始类型或枚举类型

来自分类Dev

同一对象在不同的类中?

来自分类Dev

如何使用JPA将同一对象持久化到两个不同的db而不进行分布式事务?

来自分类Dev

访问同一对象中的对象属性

来自分类Dev

Java中同一对象内的对象列表

来自分类Dev

获取同一对象的不同JSON表示形式

来自分类Dev

同一对象的不同内存地址

来自分类Dev

同一对象的不同类型

来自分类Dev

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

来自分类Dev

每次Entity Framework数据库迁移后如何访问上下文

来自分类Dev

可以在单个TransactionScope内使用多个Entity Framework数据上下文吗?

来自分类Dev

在Entity Framework中使用DbSet而不是IDbSet模拟数据库上下文类

来自分类Dev

如何使用Entity Framework以可编辑的DataGridView和上下文跟踪更改的方式筛选数据?

Related 相关文章

  1. 1

    将同一对象存储在不同的数组中

  2. 2

    将同一对象添加到不同的nsmutablearray内存效果

  3. 3

    在Entity Framework 6中使用来自多个线程的单个上下文

  4. 4

    将对象列表添加到Entity Framework中的数据库上下文

  5. 5

    来自WCF数据服务的Entity Framework 6数据上下文

  6. 6

    使用Entity Framework 6的多个上下文,跨dbcontexts引用了多个实体

  7. 7

    共享数据上下文/注入依赖项Entity Framework 6代码优先

  8. 8

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

  9. 9

    从Entity Framework Core中的cookie和基本路径创建数据库上下文

  10. 10

    Angular 5 - 从 FormGroup 创建对象数组会将同一对象推送到我的数组中

  11. 11

    使用多个Entity Framework上下文并行查询

  12. 12

    尝试模拟Entity Framework上下文时抛出TargetInvocationException

  13. 13

    Python将对象添加到同一对象方法中的列表

  14. 14

    实体框架不会将数据库上下文中仍然存在的对象与从不同类引用的同一对象相关联

  15. 15

    Entity Framework Core 腳手架附加表而不是上下文

  16. 16

    在带有Entity Framework的ASP.NET MVC中,在此上下文中仅支持原始类型或枚举类型

  17. 17

    在带有Entity Framework的ASP.NET MVC中,在此上下文中仅支持原始类型或枚举类型

  18. 18

    同一对象在不同的类中?

  19. 19

    如何使用JPA将同一对象持久化到两个不同的db而不进行分布式事务?

  20. 20

    访问同一对象中的对象属性

  21. 21

    Java中同一对象内的对象列表

  22. 22

    获取同一对象的不同JSON表示形式

  23. 23

    同一对象的不同内存地址

  24. 24

    同一对象的不同类型

  25. 25

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

  26. 26

    每次Entity Framework数据库迁移后如何访问上下文

  27. 27

    可以在单个TransactionScope内使用多个Entity Framework数据上下文吗?

  28. 28

    在Entity Framework中使用DbSet而不是IDbSet模拟数据库上下文类

  29. 29

    如何使用Entity Framework以可编辑的DataGridView和上下文跟踪更改的方式筛选数据?

热门标签

归档