我有一个服务器客户端架构,其中服务器为客户端提供了一个 Rest API 来同步整个数据库数据。他们将其保存到本地 SQLite 数据库中。该模型位于共享项目中,有时可能会发生变化。因此,客户端需要更新其本地 SQLite 数据库架构。这当然只有在更新客户端软件后才会发生(数据库文件保持不变)。
它只是通过通常删除数据库文件然后重新创建它来实现。
_context.Database.EnsureDeleted();
_context.Database.EnsureCreated();
AttachNewDataFromServerToDatabaseContext(_context);
_context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
Rest API 服务被实例化为单例并始终使用相同的数据库上下文对象。第一次同步工作正常。但接下来的失败:
System.InvalidOperationException: The instance of entity type '***' cannot be tracked because another instance with the key value '{id: ***}' is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached.
Run Code Online (Sandbox Code Playgroud)
因此,尽管整个数据库已被删除,但更改跟踪器仍然知道“旧”实体。
我对此的看法:
你怎么看待这件事?谢谢你的帮助!