我没有很多ORM经验。我试图找出处理从映射类中添加/删除属性的最佳方法,理想情况是以自动和通用的方式。
我正在使用ServiceStack.OrmLite和SQLite。
数据库的目的是文档存储。没有外键/参照完整性问题。
E.G。
public class Foo
{
public Bar {get; set;}
public Baz {get; set;}
}
使用列Bar,Baz创建表Foo。
在一个理想的世界中,Foo类永远不会改变,所以我不必担心这一点,但实际上它可以。
让我们说Foo也需要一个Quz属性。
public class Foo
{
public Bar {get; set;}
public Baz {get; set;}
public Quz {get; set;}
}
读取没问题,Quz只是返回null,但插入失败,因为没有Quz列。这是有道理的。
让我们说不再需要Baz。
public class Foo
{
public Bar {get; set;}
public Quz {get; set;}
}
读取/插入工作正常,但是基础表仍然会有Baz列,这有点乱。
鉴于它是一个服务器应用程序,并且不会经常重启,我考虑并解雇了一些事情:
一开始,如果Foo表存在,请将其读入临时存储,删除并重新创建Foo(意味着将使用正确的模式创建表),然后重新插入数据。这看起来工作正常,并且可以保持架构与类同步,但速度太慢。
一开始,查询基础表以获取其列定义并使用反射来计算Foo类的实际应该是什么的列。根据需要添加/删除列。我很确定我可以采用这种方法,但它比理想的更复杂,我不相信这是一个好主意。