使用ORM时保持类和表模式同步

时间:2012-11-07 03:56:35

标签: c# sqlite orm ormlite-servicestack

我没有很多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类的实际应该是什么的列。根据需要添加/删除列。我很确定我可以采用这种方法,但它比理想的更复杂,我不相信这是一个好主意。

0 个答案:

没有答案