【问题标题】:How does one seed Entity Framework 7 database?一粒Entity Framework 7数据库怎么做?
【发布时间】:2015-07-24 14:10:17
【问题描述】:

是否有合适的方法来播种数据库?

我似乎找不到任何文件来完成这项工作。

【问题讨论】:

  • 看一下测试代码,看看是怎么做到的

标签: entity-framework-core


【解决方案1】:

目前,您必须手动播种(但将来会有 talk of a high level API 用于此)。

您可以在 Startup 类的 Configure 方法中这样做(假设您使用的是 ASP.NET 5):

public class Startup
{
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory logger)
    {
        using (var context = (MyContext) app.ApplicationServices.GetService<MyContext>())
        {
            if (env.IsDevelopment())
            {
                //Add seed code here

                context.MyEntity.Add(new MyEntity{ Id = 1 });
                //etc

                context.SaveChanges();
            }
        }
    }
}

您还可以查看 Music Store 示例应用程序,它的 SampleData 类更复杂且更健壮。

【讨论】:

  • 如果您不使用 ASP .NET 5 怎么办?我们有哪些选择来进行播种?
  • 我说的是 EF7
  • 哦,对不起,我误会了。您可能可以使用global.asax 中的Application_Start 方法或类似方法。
  • 该死..所以我们在 EF7 中没有种子?
【解决方案2】:

在Startup类的public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)函数中,添加这个

if (env.IsDevelopment())
{
    app.UseBrowserLink();
    SeedData.InitializeDatabaseAsync(app.ApplicationServices).Wait();
}

以及SeedData.InitializeDatabaseAsync的实现如下

public class SeedData
{
    public static async Task InitializeDatabaseAsync(IServiceProvider serviceProvider,
        bool createUsers = true)
    {
        using (var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())
        {
            var db = serviceScope.ServiceProvider.GetService<SampleDbContext>();
            await db.Database.MigrateAsync();
            using (db)
            {
                await InsertTestData(db);
            }
        }
    }

    private static async Task InsertTestData(SampleDbContextdbContext)
    {
        // seed data here
    }
}

以上内容的参考here。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2016-05-06
    • 2016-03-31
    • 1970-01-01
    • 2011-01-05
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2011-07-29
    相关资源
    最近更新 更多