我在设备和服务器之间为大型数据库创建同步功能。我有很多列表表(下拉/选择器中的项目)。 我不想写很多代码,而且我正在寻找一个优雅的解决方案:)
在SQLite中的设备上,我定义了列表表,如
public class NameTable : IBusinessEntity {
public int Id { get; set; } = 0;
public string Description { get; set; }
}
当我在数据库中保存新记录(项目)时,我称之为
public int SaveItem<T>(T item) where T : IBusinessEntity {
lock (locker) {
if (item.Id != 0) {
database.Update(item);
return item.Id;
}
else {
return database.Insert(item);
}
}
}
现在,当设备从服务器收到新记录时,结构就像
public class SyncResult {
public int DeviceId { get; set; }
public int ServerId { get; set; }
public string TableName { get; set; }
public string Description { get; set; }
}
然后我要保存(如果 DeviceId == 0 或更新现有项目,则插入新记录)。
我的问题是:如何从 SyncResult 中调用 SaveItem ,其中 T 是 TableName ?
提前感谢您的帮助(我可以为此提供啤酒!)
SaveItem
是MyDatabase
班级的成员。基本上我的问题是如何将T作为字符串传递给SaveItem<T>
。
我不知道我是否清楚地解释了我的问题。
答案 0 :(得分:0)
您可以将TableName
映射到Type
,例如Dictionary<string,Type>
使用Activator
类构建类型。使用反射来填充数据。