Mag*_*son 12 entity-framework code-first ef-code-first
我的Seed()方法永远不会被调用.当我Update-Database从软件包管理器控制台执行操作时调用它,但从代码运行时从不调用它.如果删除我的数据库,则会创建所有表(因此执行我的迁移类),但我的Seed()代码永远不会被调用.MVC 4,实体框架工作5代码优先.
Global.asax中:
protected void Application_Start()
{
Database.SetInitializer<MyContext>(new DbInitializer());
}
Run Code Online (Sandbox Code Playgroud)
DBINIT:
internal class DbInitializer : MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>
{
}
Run Code Online (Sandbox Code Playgroud)
的DbContext:
public partial class MyContext : DbContext
{
public MyContext() : base("DefaultConnection")
{
}
// public DBSets....
}
Run Code Online (Sandbox Code Playgroud)
组态:
internal sealed class Configuration : DbMigrationsConfiguration<MyContext>
{
public Configuration()
{
// The constructor is actually called
AutomaticMigrationsEnabled = false;
}
protected override void Seed(MyContext context)
{
// My seed code, never called
}
Run Code Online (Sandbox Code Playgroud)
可能有什么不对?
Mag*_*son 15
所以原因是我需要在配置文件中指定我的自定义初始化程序:
<entityFramework>
<contexts>
<context type="EFTest2.MyContext, EFTest2">
<databaseInitializer type="EFTest2.Initializers.DbInitializer, EFTest2" />
</context>
</contexts>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
Run Code Online (Sandbox Code Playgroud)
之后,Seed调用我的方法.
请先参考接受的答案.
我只想为这个问题添加一个非常重要的注释.
我正面临EXACTLY其被这个问题所描述(这导致我在这里)同样的问题.但我使用的是CreateDatabaseIfNotExists而不是MigrateDatabaseToLatestVersion,即使应用了接受的答案,我的种子方法也没有执行.
我的问题如下:根据Seed方法的文档:如果Database Initializer是以下之一,则不会执行该Seed方法DbMigrationsConfiguration
如果您正在使用其中一种类型,则应创建自己的类,该类继承自其中一种类型,然后覆盖您自己的类中的种子方法.
在我的例子中,添加以下类解决了这个问题.
public class CreateNotifierDatabaseIfNotExists : CreateDatabaseIfNotExists<NotifierContext>
{
protected override void Seed(NotifierContext context)
{
// the code of the seeding is go here
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16487 次 |
| 最近记录: |