SQL(SQLite)和向后兼容性

时间:2015-08-16 18:34:05

标签: c# sql sqlite-net

这里是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并保存到新表。

对于每个添加/删除的属性,这似乎有点麻烦,但

1 个答案:

答案 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)的结构更加宽容。

最后,您计划数据层结构越好,遇到此类问题的次数就越少。

我希望这有所帮助。