4

我对 ORM 没有太多经验。我试图找出处理从映射类中添加/删除属性的最佳方法,最好是自动和通用的方式。

我正在使用 ServiceStack.OrmLite 和 SQLite。

数据库的目的是文档存储。没有外键/参照完整性问题。

例如

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 只是返回为空,但插入失败,因为没有 Quz 列。这是有道理的。

可以说不再需要 Baz。

public class Foo
{
   public Bar {get; set;}
   public Quz {get; set;}
}

读取/插入工作正常,但是基础表仍然会有 Baz 列,这有点乱。

鉴于它是一个服务器应用程序,并且不会经常重新启动,我考虑并忽略了几件事:

  • 开始时,如果 Foo 表存在,将其读入临时存储,删除并重新创建 Foo(意味着将使用正确的模式创建表),然后重新插入数据。这似乎工作正常,并且可以使模式与类保持同步,但是它太慢了。

  • 开始时,查询基础表以获取其列定义并使用反射来确定 Foo 类的列实际上应该是什么。根据需要添加/删除列。我很确定我可以让这种方法发挥作用,但它比理想更复杂,而且我不相信这是一个好主意。

4

0 回答 0