C# SQL(SQLite)和向后兼容性

C# SQL(SQLite)和向后兼容性,c#,sql,sqlite-net,C#,Sql,Sqlite Net,这里是SQL/DB的初学者-我正在设计一个通用windows应用程序,DB可能会派上用场,所以我正在阅读SQL/SQLite,我想知道-向后兼容性(类/表方面)是如何工作的?假设我从一个用作表基础的类中添加或删除属性,我仍然能够与旧类数据交互并将其强制转换到更新的类中吗?在查询数据库时,如何监视添加/删除的属性 谢谢你抽出时间 编辑:场景-如果我有一个具有两个属性的用户-“Id”,“Name” public class User { public int Id {get; set; }

这里是SQL/DB的初学者-我正在设计一个通用windows应用程序,DB可能会派上用场,所以我正在阅读SQL/SQLite,我想知道-向后兼容性(类/表方面)是如何工作的?假设我从一个用作表基础的类中添加或删除属性,我仍然能够与旧类数据交互并将其强制转换到更新的类中吗?在查询数据库时,如何监视添加/删除的属性

谢谢你抽出时间

编辑:场景-如果我有一个具有两个属性的用户-“Id”,“Name”

public class User
{
    public int Id {get; set; }
    public string Name {get; set;}
}
我已经用一个“用户”数据库构建了一个应用程序,我正在使用它一段时间。然后,我想向我的用户类添加另一个属性。假设是“年龄”。我是否可以将此新属性添加到我的原始“User”类中,并且仍然可以通过以下方式访问原始Users表:

var user = DbConnection.Table<User>().Where(x => x.Id == tId).FirstOrDefault();
var user=DbConnection.Table()。其中(x=>x.Id==tId.FirstOrDefault();
显然,一个选项是保留原始用户并创建另一个类UserEx,该类将具有原始属性+年龄。然后我抓取所有的用户,将它们移植到UserEx并保存到一个新表中

不过,对于每个添加/删除的属性来说,这样做似乎有点麻烦

我可以将这个新属性添加到我的原始“User”类中,并且仍然是 是否能够使用访问原始用户表

var user=DbConnection.Table()。其中(x=>x.Id==tId.FirstOrDefault();
向用户类添加属性是否会更新基础SQLLite 桌子您需要扩展该类以保持兼容性

公共类用户
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共用户getUser(inttid)
{
var user=DbConnection.Table(),其中(x=>x.Id==tId.FirstOrDefault();
Id=user.Id;
Name=user.Name;
//age=user.age;//不可能
}        
}
公共类详细信息使用者:用户
{
公共整数{get;set;}
公共详细信息用户getUser(int tId)
{
var user=DbConnection.Table(),其中(x=>x.Id==tId.FirstOrDefault();
base.Id=user.Id;
base.Name=user.Name;
//age=user.age;//不可能
}
public DetailedUser getDetailedUser(inttid)
{
var user=DbConnection.Table(),其中(x=>x.Id==tId.FirstOrDefault();
base.Id=user.Id;
base.Name=user.Name;
年龄=用户年龄;
}
}
您概述的明显的“繁琐”流程是另一个有效的选择。无论哪种方式,当您在应用程序中更改数据层时,都会产生后果

我想到两件事,一件是Android SqlLite中有一个onUpgrade函数,您可以将“繁琐”的数据层升级逻辑放入其中。。或者您可以使用NoSQL解决方案,如MongoDB,其中数据层对底层记录(ymmv)的结构更加宽容

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


我希望这能有所帮助

@Kickaha你为什么这么认为?@Oyiwai:你能不能给你的问题添加一个简单的例子,在那里你有一张桌子,改变桌子,然后你想做什么?这可能有助于澄清你的问题,无论是对你自己还是对阅读你问题的人。这也会缩小你的问题范围,使之成为现实。@Kickaha根据《编程和软件开发》的说法,这是离题的。Kickaha这个问题不适合程序员——很快就会被否决并在那里结束,请参阅推荐阅读:@gnat最初我认为这会更适合“软件架构和设计”,所以程序员。SE。。但我明白你的观点,广泛的范围是普遍不受欢迎的,干杯。
var user = DbConnection.Table<User>().Where(x => x.Id == tId).FirstOrDefault();
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;
        }
    }