如何从另一个 DbContext 初始化种子数据

How to initialize seed data from another DbContext

我的项目有 2 个 DbContext(在 2 个 Entity Framework 项目中):CoreDbContextModule1DbContext

CoreDbContext 中,我有 1 个 table 名为 SystemStatus。那么是否可以将种子数据从Module1DbContext插入到这个table?我尝试将 CoreDbContext 传递给 Module1DbContext 中的 Seed 方法,但它确实有效。

是的。只需更新其他上下文并执行您需要的操作即可。如果 CoreDbContext 在另一个项目中,您将需要引用它。

protected override void Seed(Module1DbContext context)
{
    // get some data from the current context you want to use for seeding
    var someItemFromM1 = context.FooBar.FirstOrDefault(fb => fb.Id == myID);
    if (someDataFromM1 != null)
    {
        using (var coreContext = new CoreDbContext())
        {
            // Using AddOrUpdate which is designed for seeding, but you could just use standard update code
            coreContext.SystemStatuses.AddOrUpdate(
                ss => ss.Code,  // Unique field to check so duplicate not added
                new SystemStatus
                {
                    Code = someItemFromM1.Code,
                    Description = someItemFromM1.Description
                });
            coreContext.SaveChanges();
        }
    }
}