我可以将实体 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));
}