ormlite-servicestack,Orm,ormlite Servicestack" /> ormlite-servicestack,Orm,ormlite Servicestack" />

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

通过Servicestack中的OrmLite预填充表的最佳实践,orm,ormlite-servicestack,Orm,ormlite Servicestack,我正在通过OrmLite生成表,我想知道预填充表的最佳实践。示例表-国家、州、城市等 我可以想出几种预填充表格的方法: 列表项 种子数据库 API(如果可能) 静态文件 编码 独立项目 然而,在某些情况下,数据可能会变得很大,例如世界各地的城市,因此代码中的数据是不可行的 我还可以考虑通过另一个项目直接生成需要预先填充的表,在那里我可以从一个源中获取数据并将其获取到数据库中。p> 然而,我想知道当您通过ORM生成它时(特别是在生产中)的场景。你将如何处理这个问题 这一定是所有ORM中的一个常见问

我正在通过OrmLite生成表,我想知道预填充表的最佳实践。示例表-国家、州、城市等

我可以想出几种预填充表格的方法:

  • 列表项
  • 种子数据库
  • API(如果可能)
  • 静态文件
  • 编码
  • 独立项目
  • 然而,在某些情况下,数据可能会变得很大,例如世界各地的城市,因此代码中的数据是不可行的

    我还可以考虑通过另一个项目直接生成需要预先填充的表,在那里我可以从一个源中获取数据并将其获取到数据库中。p> 然而,我想知道当您通过ORM生成它时(特别是在生产中)的场景。你将如何处理这个问题


    这一定是所有ORM中的一个常见问题。

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

    1.在宿主项目中维护代码表 由于ASP.NET的默认行为将自动重新启动AppDomain,因此只要将更改保存到
    Web.config
    ,就足以在下次刷新任何页面时重新启动ASP.NET应用程序

    2.添加到临时显式测试中的测试项目 如果数据太大,无法放入工作项目中,我会首先将其移动到
    [Explicit]
    文本夹具内的单独测试项目中(因此它不会自动运行),您可以轻松运行manuallu,例如:

    [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);
                ...
            }
        }
    } 
    
    [显式]
    [测试夹具]
    公共类AdminTasks
    {
    [测试]
    public void重新创建和填充表()
    {
    var dbFactory=新的OrmLiteConnectionFactory(…);
    使用(var db=dbFactory.Open())
    {
    db.DropAndCreateTable();
    db.InsertAll(种子数据国家);
    ...
    }
    }
    } 
    
    3.将数据保存在外部静态文本文件中 最后,如果数据太大,无法放入C#类中,我会将其保存到测试中的一个静态文件中,您可以轻松地将其重新水合到可以使用OrmLite填充的POCO中,例如:

    [Test]
    public void Recreate_and_populate_tables()
    {
        var dbFactory = new OrmLiteConnectionFactory(...);
        using (var db = dbFactory.Open())
        {
            db.DropAndCreateTable<Country>();
            var countries = File.ReadAllText("~/countries.txt".MapAbsolutePath())
                .FromJson<List<Country>>();
            db.InsertAll(countries);
            ...
        }
    }
    
    [测试]
    public void重新创建和填充表()
    {
    var dbFactory=新的OrmLiteConnectionFactory(…);
    使用(var db=dbFactory.Open())
    {
    db.DropAndCreateTable();
    var countries=File.ReadAllText(“~/countries.txt”.MapAbsolutePath())
    .FromJson();
    db.InsertAll(国家);
    ...
    }
    }
    
    <appSettings>
      <add key="RecreateTables" value="True" />
    </appSettings>
    
    [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);
                ...
            }
        }
    } 
    
    [Test]
    public void Recreate_and_populate_tables()
    {
        var dbFactory = new OrmLiteConnectionFactory(...);
        using (var db = dbFactory.Open())
        {
            db.DropAndCreateTable<Country>();
            var countries = File.ReadAllText("~/countries.txt".MapAbsolutePath())
                .FromJson<List<Country>>();
            db.InsertAll(countries);
            ...
        }
    }