这里是SQL / DB的初学者 - 我正在设计一个通用的Windows应用程序,其中数据库可能会派上用场,所以我正在阅读SQL / SQLite,我想知道 - 怎么做向后兼容性(明智的类/表)有效吗?假设我从一个我用作表的基础的类中添加或删除属性 - 我是否仍然能够与旧类数据交互并将其转换为更新的类?如何在查询db时监视添加/删除的属性?
感谢您的时间。
修改:情景 - 如果我有一个拥有2个属性的用户 - ' Id','名称'。
public class User
{
public int Id {get; set; }
public string Name {get; set;}
}
我已经与用户'一起构建了一个应用程序。 Db和我用了一段时间。然后,我想在我的用户类中添加另一个属性。假设它已经过了#39;年龄'我可以将此新属性添加到我的原始用户' class仍然能够使用以下命令访问原始Users表:
var user = DbConnection.Table<User>().Where(x => x.Id == tId).FirstOrDefault();
显然,一个选项是保留原始用户并创建另一个UserEx类,它将具有原始属性+ Age。然后我抓住所有用户,将它们移植到UserEx并保存到新表。
对于每个添加/删除的属性,这似乎有点麻烦,但
答案 0 :(得分:1)
我可以将这个新属性添加到我的原始用户&#39;上课但仍然是 能够使用?
访问原始Users表
var user = DbConnection.Table<User>().Where(x => x.Id == tId).FirstOrDefault();
向用户类添加属性是否会更新基础SQLLite 表?您需要扩展该类以保持兼容性。
public class User
{
public int Id {get; set; }
public string Name {get; set;}
public User getUser(int tId)
{
var user = DbConnection.Table<User>().Where(x => x.Id == tId).FirstOrDefault();
Id = user.Id;
Name = user.Name;
//age = user.age; // not possible
}
}
public class DetailedUser:User
{
public int age { get; set; }
public DetailedUser getUser(int tId)
{
var user = DbConnection.Table<User>().Where(x => x.Id == tId).FirstOrDefault();
base.Id = user.Id;
base.Name = user.Name;
//age = user.age; // not possible
}
public DetailedUser getDetailedUser(int tId)
{
var user = DbConnection.Table<DetailedUser>().Where(x => x.Id == tId).FirstOrDefault();
base.Id = user.Id;
base.Name = user.Name;
age = user.age;
}
}
显而易见的&#39;繁琐的&#39;您概述的流程是另一个有效的选择。无论哪种方式,当您更改应用程序中的数据层时都会产生后果。
有两件事情可以想到,一个是在Android中,SqlLite有一个onUpgrade功能,你可以把你的&#34;麻烦的&#34;数据层升级逻辑..或者您可以使用像MongoDB这样的NoSQL解决方案,其中数据层对基础记录(ymmv)的结构更加宽容。
最后,您计划数据层结构越好,遇到此类问题的次数就越少。
我希望这有所帮助。