我可以将实体 class 的种子数据与 class 的声明相关联吗?
Can I associate seed data for an entity class with the declaration of that class?
我有一个叫 Planet
的 class。这些不会经常更改,用于初始化数据库中该实体的种子数据也不会更改。我不想迁移 classes 大量的种子数据。除了为每个这样的 class 生成一个迁移之外,还有其他方法可以为 class 连接种子数据吗?例如。我想在具有许多实体的迁移中添加一个声明,即 Planet
的种子数据包含在 class PlanetSeedData
.
中
没有合适的 EF 方法来执行此操作。但是,您可以相当简单地自己制作。
由于您将通过调用 Sql(string)
函数在迁移中播种数据,因此将其移出到另一个 class 的简单方法是定义 class 如下:
public static class PlanetSeedData
{
public static void Seed(Action<string> sql)
{
sql("INSERT INTO dbo.Planets(Name) VALUES('Mercury')");
sql("...");
}
}
然后从您的迁移中调用它:
public override void Up()
{
// CreateTable(...)
PlanetSeedData(x => Sql(x));
}
我有一个叫 Planet
的 class。这些不会经常更改,用于初始化数据库中该实体的种子数据也不会更改。我不想迁移 classes 大量的种子数据。除了为每个这样的 class 生成一个迁移之外,还有其他方法可以为 class 连接种子数据吗?例如。我想在具有许多实体的迁移中添加一个声明,即 Planet
的种子数据包含在 class PlanetSeedData
.
没有合适的 EF 方法来执行此操作。但是,您可以相当简单地自己制作。
由于您将通过调用 Sql(string)
函数在迁移中播种数据,因此将其移出到另一个 class 的简单方法是定义 class 如下:
public static class PlanetSeedData
{
public static void Seed(Action<string> sql)
{
sql("INSERT INTO dbo.Planets(Name) VALUES('Mercury')");
sql("...");
}
}
然后从您的迁移中调用它:
public override void Up()
{
// CreateTable(...)
PlanetSeedData(x => Sql(x));
}