通过Servicestack中的OrmLite预填充表的最佳实践

时间:2014-08-28 17:30:18

标签: orm ormlite-servicestack

我通过OrmLite生成表格,我想知道预先填充表格的最佳做法。示例表 - 国家,州,城市等。

我可以考虑预先填充表格的几种方法:

  1. 列表项
  2. Seed DB
  3. API(如果可能)
  4. 静态文件
  5. 代码
  6. 单独项目
  7. 但是,在某些情况下,数据可能会像世界各地的城市示例那样变大,因此代码不可行。

    我还可以考虑生成需要通过另一个项目直接预先填充的表,我可以从源中获取数据并将其放入数据库中。

    然而,当你通过ORM(特别是在制作中)生成它时,我想知道这种情况。你会如何解决这个问题?

    这必须是所有ORM的常见问题。

1 个答案:

答案 0 :(得分:2)

如果它只是像国家,州等那样的代码表,它们足够小,仍然可以将它们作为项目的一部分,通常我会创建一个名为{{1的单独的静态类与POCO的所有数据

1。维护主机项目中的代码表

SeedData

然后在你的AppHost populate中添加一个关于是否在启动时重新创建它们的标志,例如:

public static class SeedData
{
    public static List<Country> Countries
    {
        get { return new[] { new Country(...), ... }; }
    }
}

更改AppSetting以重新创建表格

这样,当您将public void Configure(Container container) { var appSettings = new AppSettings(); //Read from Web.config <appSettings/> if (appSettings.Get("RecreateTables", false)) { using (var db = container.Resolve<IDbConnectionFactory>().Open()) { db.DropAndCreateTable<Country>(); db.InsertAll(SeedData.Countries); ... } } } appSetting更改为RecreateTables时,您可以重新创建表格并重新填充数据,例如:

True

由于ASP.NET的默认行为将自动重新启动AppDomain,因此只需将更改保存到<appSettings> <add key="RecreateTables" value="True" /> </appSettings> 即可在下次刷新任何页面时重新启动ASP.NET应用程序。

2。在adhoc显式测试中添加到测试项目

如果数据太大而无法适应工作项目,我首先将其移动到Web.config文本夹具内的单独测试项目(因此它永远不会自动运行),您可以轻松地运行manuallu,例如:

[Explicit]

3。将数据保存在外部静态文本文件

最后,如果数据太大而不适合C#类,我会将其保存到测试中的静态文件中,您可以轻松地将其重新水合成可以用OrmLite填充的POCO,例如:

[Explicit]
[TestFixture]
public class AdminTasks
{
    [Test]
    public void Recreate_and_populate_tables()
    {
        var dbFactory = new OrmLiteConnectionFactory(...);
        using (var db = dbFactory.Open())
        {
            db.DropAndCreateTable<Country>();
            db.InsertAll(SeedData.Countries);
            ...
        }
    }
}