我有兩個MySQL數據庫:
- 大主數據庫
- 小型客戶端數據庫
實施例的表:
大數據庫用戶:
文本的用戶名
- INT ID
- VARCHAR登錄
- VARCHAR密碼
- ...很多更多的領域
客戶數據庫用戶
- INT ID
- int唯一api_id (ID來自主)
- VARCHAR登錄
- VARCHAR密碼
問題: 我需要同步數據庫,但我不不知道如何以最好的方式做到這一點。我讀this question,但它已經很老了,不包括我的情況。 我通過REST API與主數據庫進行通信,不直接連接。
我的同步算法
- 下載和反序列化從REST API的數據(例如/ API /用戶/)來ApiUser對象列表
public class ApiUser { int id; string login; string password; } public class User{ int id; int api_id; string login; string password; }
- 遍歷列表Apiusers
- 如果實體與ApiUser。ID存在覆蓋所有領域
- 否則創建新的實體
- 保存更改
我的代碼:
public void syncUsers(List <ApiUser> ApiUsers) { using (var db = new dbEntities()) { ApiUsers.ForEach(apiUser => { var dbUser = db.client .Where(c => c.api_id == apiUser.id) .SingleOrDefault(); if (dbUser == null) { var userObj = new user() { api_id = apiUser.id, login = apiUser.login, password = apiUser.password }; db.client.Add(userObj); } else { dbUser.api_id = apiUser.id, dbUser.login = apiUser.login, dbUser.password = apiUser.password } }); db.SaveChanges(); } }
問: 如何做的更好?我有從主數據庫中刪除實體的問題,我的算法不涵蓋這種情況。
除了刪除從數據庫中的用戶是有可能有一個標誌WHI如果用戶被刪除,ch可以被標記爲true,以便您的代碼不會再次重新創建用戶? – Sandesh