2015-08-15 30 views
1

刚开始使用Servicestack和Ormlite(SqlServer)玩。我正在寻找一种方法来自动创建表格,如果它们不存在的话。我发现:自动创建表ServiceStack.OrmLite

CreateTableIfNotExists<T> 

这是很酷,但反正是有两种实现将被“定位”和自动创建的接口还是有办法的地方注入他们有他们的汽车产生的?

这将是很简单的实现类似的东西,我只是不想重新发明轮子,如果它已经在那里。

回答

0

OrmLite是一个代码优先的POCO ORM,它不需要任何基类或接口,所以基本上取决于您的应用程序,POCO应该在OrmLite中用于创建RDBMS表。

您可以通过查找具有明确的[AutoIncrement][PrimaryKey]属性的POCO来实现此目的。 (由于OrmLite同样假设Id属性也定义了主键,因此不需要这么做)。

这将是这样的:

var tables = assembly.GetTypes() 
    .Where(x => x.GetProperties() 
     .Any(p => p.HasAttribute<AutoIncrementAttribute>() || 
        p.HasAttribute<PrimaryKeyAttribute>())) 
    .ToArray(); 

db.CreateTableIfNotExists(tables); 

个人而言,我不会这么做,因为我觉得要明确和声明哪些表应该得到建立是非常重要的,它也可以作为一个参考点,所有表在您的应用程序中使用列出,允许您能够轻松导航到Ctrl + Click(在R#中)每个表的定义。

+0

感谢您的回复。我明白你在说什么。只是认为将所有类型注册到应该创建的容器中(如果它们不存在)会很方便。 – Wjdavis5

+0

@ Wjdavis5如果你在'db.CreateTableIfNotExists ()'你的应用程序中注册每个表格,那么你的应用程序可以工作是否它没有创建表格,创建了一些表格或创建了所有表格。为什么我认为它们都应该被定义,所以它不依赖于预定义的外部状态。 – mythz