自动创建表 ServiceStack.OrmLite
Auto Create Tables ServiceStack.OrmLite
刚开始使用 Servicestack 和 Ormlite (SqlServer)。我正在寻找一种方法来自动创建表(如果它们不存在)。我发现:
CreateTableIfNotExists<T>
这很酷,但是有没有办法实现一个 'located' 和自动创建的接口,或者有一种方法可以将它们注入某个地方以自动创建它们?
实现类似的东西会很简单我只是不想重新发明轮子,如果它已经存在的话。
OrmLite 是一个代码优先的 POCO ORM,它不需要任何基础 类 或接口,所以基本上取决于您的应用程序应该在 OrmLite 中使用哪个 POCO 来创建 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# 中)轻松导航到每个表的定义。
刚开始使用 Servicestack 和 Ormlite (SqlServer)。我正在寻找一种方法来自动创建表(如果它们不存在)。我发现:
CreateTableIfNotExists<T>
这很酷,但是有没有办法实现一个 'located' 和自动创建的接口,或者有一种方法可以将它们注入某个地方以自动创建它们?
实现类似的东西会很简单我只是不想重新发明轮子,如果它已经存在的话。
OrmLite 是一个代码优先的 POCO ORM,它不需要任何基础 类 或接口,所以基本上取决于您的应用程序应该在 OrmLite 中使用哪个 POCO 来创建 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# 中)轻松导航到每个表的定义。