如何在分布式应用程序中允许多个用户在 Entity Framework 中执行 Db 更新
How to allow multiple users to perform Db updates in Entity Framework in distributed application
抱歉,如果这是一个愚蠢的问题,但我今天很累而且 google 没有帮助。这一定是一个常见问题,但我没有找到任何问题的答案。
每当我在 clickonce 桌面应用程序中使用 Entity Framework 时,我都会遇到一些 "entity object cannot be referenced by multiple instances of IEntityChangeTracker" 错误。当同一数据库对象的多个版本被上下文的不同版本更新时,就会出现这种情况。
在 Web 项目中,通过服务器上的某种单例模式发送所有 Db 调用很容易绕过这个问题。如果您将大量 Db update/insert 调用外包给服务,您也可以这样做。
但是,如果您有一个分布式应用程序(例如,通过 clickonce 的 WPF),它可能有很多用户连接到数据库怎么办。每个用户都有自己的代码安装,因此即使您将业务逻辑从 Db 逻辑中分离出来,每个用户仍然会有自己的上下文副本。
是否有任何类型的模式或技术允许 inserts/updates 直接从应用程序中避免 "multiple contexts" 问题?还是使用 Windows 服务之类的东西是实现此目标的唯一方法?
即使是单个用户,您能否重现此错误运行您的应用程序?
因为出现 "entity object cannot be referenced by multiple instances of IEntityChangeTracker" 错误意味着您正在代码中创建 2 个 DBContext 并尝试通过另一个上下文从上下文管理实体(创建或读取)。与分布式并发无关。与多个用户无关。
检查此 SO question 并尝试识别代码中的错误模式。在该示例中,两个上下文都在内存中,但由于每个实体都保留对其 IEntityChangeTrakeer 的引用,因此即使其 DbContext 已被释放并且您尝试使用其他上下文管理该实体,您也会收到此错误。
抱歉,如果这是一个愚蠢的问题,但我今天很累而且 google 没有帮助。这一定是一个常见问题,但我没有找到任何问题的答案。
每当我在 clickonce 桌面应用程序中使用 Entity Framework 时,我都会遇到一些 "entity object cannot be referenced by multiple instances of IEntityChangeTracker" 错误。当同一数据库对象的多个版本被上下文的不同版本更新时,就会出现这种情况。
在 Web 项目中,通过服务器上的某种单例模式发送所有 Db 调用很容易绕过这个问题。如果您将大量 Db update/insert 调用外包给服务,您也可以这样做。
但是,如果您有一个分布式应用程序(例如,通过 clickonce 的 WPF),它可能有很多用户连接到数据库怎么办。每个用户都有自己的代码安装,因此即使您将业务逻辑从 Db 逻辑中分离出来,每个用户仍然会有自己的上下文副本。
是否有任何类型的模式或技术允许 inserts/updates 直接从应用程序中避免 "multiple contexts" 问题?还是使用 Windows 服务之类的东西是实现此目标的唯一方法?
即使是单个用户,您能否重现此错误运行您的应用程序?
因为出现 "entity object cannot be referenced by multiple instances of IEntityChangeTracker" 错误意味着您正在代码中创建 2 个 DBContext 并尝试通过另一个上下文从上下文管理实体(创建或读取)。与分布式并发无关。与多个用户无关。
检查此 SO question 并尝试识别代码中的错误模式。在该示例中,两个上下文都在内存中,但由于每个实体都保留对其 IEntityChangeTrakeer 的引用,因此即使其 DbContext 已被释放并且您尝试使用其他上下文管理该实体,您也会收到此错误。