【问题标题】:Auto Create Tables ServiceStack.OrmLite自动创建表 ServiceStack.OrmLite
【发布时间】:2015-09-09 03:05:55
【问题描述】:

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

CreateTableIfNotExists<T>

这很酷,但是有没有实现一个可以“定位”并自动创建的接口,或者将它们注入某个地方以自动创建它们的方法?

如果它已经存在的话,我只是不想重新发明轮子。

【问题讨论】:

    标签: servicestack ormlite-servicestack


    【解决方案1】:

    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# 中)导航到每个表的定义。

    【讨论】:

    • 感谢您的回复。我明白你在说什么。只是认为在一个容器中注册所有类型会很方便,如果它们不存在则应该创建它们。
    • @Wjdavis5 如果您使用db.CreateTableIfNotExists&lt;T&gt;() 在您的应用程序中注册每个表,那么您的应用程序将可以工作,无论它没有创建表、创建了一些表还是创建了所有表。为什么我认为它们都应该被定义,所以它不依赖于预定义的外部状态。
    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 2021-09-12
    • 2019-03-17
    • 1970-01-01
    • 2014-02-05
    • 2016-07-08
    • 2020-05-03
    • 2018-11-19
    相关资源
    最近更新 更多