情景:
我有两个MySQL数据库:
- 大型主数据库
- 小型客户端数据库
示例表:
大型数据库用户:
文本用户名
- int id
- varchar login
- varchar password
- …更多字段
客户端数据库用户
- int id
- int UNIQUE api_id (来自主数据库的id)
- varchar login
- varchar password
问题: 我需要同步数据库,但是我不知道最好的方法。我阅读了这篇文章,但它相当旧,而且没有涵盖我的情况。我通过REST API与主数据库通信,直接连接不是一个选项。
我的同步算法
- 下载并反序列化来自REST API(例如/api/users/)的数据到ApiUser对象列表中
public class ApiUser { int id; string login; string password; }
public class User{ int id; int api_id; string login; string password; }
- 遍历ApiUser列表
- 如果具有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(); } }
问题: 怎样才能做得更好?我在处理来自主数据库中已删除的实体时存在问题,我的算法没有涵盖这种情况。