2012-01-17 50 views
2

我试图播种数据库EF 4.1的代码,第一能力如何重写Database.SetInitializer在EF 4.1

我在Global.asax中

Database.SetInitializer<Context>(new DataContextInitializer()); 
我的Application_Start方法下面的代码

我的上下文类仅包含一些公共DbSet语句。

这里是我DataContextIntilializer类:

public class DataContextInitializer: CreateDatabaseIfNotExists<Context> 
{ 
    protected override void Seed(Context context) 
    { 

     new List<Member>{ 
     new Member { LastName = "Allen", FirstName = "Steve", Email = "[email protected]" }, 
     new Member { LastName = "Mickey", FirstName = "Mouse", Email = "[email protected]" }, 
     new Member { LastName = "Optimus", FirstName = "Prime", Email = "[email protected]" }, 

    }.ForEach(m => context.Members.Add(m)); 

    base.Seed(context); 
} 

我的“保护覆盖无效种子”方法甚至没有被调用。我的执行不正确?我错过了什么吗?

谢谢!

回答

0

建立您的数据库?你是如何触发数据库创建的?设置初始值设定项只会告诉EF一旦需要数据库时应使用的初始值设定项,但不会触发创建项。创建数据库一旦EF首先需要它,或者一旦你拨打例如:

context.Database.Initialize(false); 

此外,如果你的数据库已经存在于您的初始化不会做任何事情。它仅适用于数据库服务器/文件系统上不存在数据库的情况。

+0

拉迪斯拉夫,这是答案:)我误解了SetInitializer的目的。我认为CreateDatabaseIfNotExists会创建数据库,如果它不在那里。谢谢! – Chris 2012-01-17 16:33:47