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