新人求教相关MVC-EF Code First(修改Model后,自动更新数据表)

新人求教有关MVC--EF Code First(修改Model后,自动更新数据表)
见如下代码,类SampleData中的Seed()方法重写了基类 DropCreateDatabaseIfModelChanges中的Seed方法,我想问的是这个重写的Seed()方法是如何被调用的呢?在项目中没有找到任何显式调用它的地方,但运行时它确实被调用了...

第二个问题,base.Seed(context);这句代码怎么理解,是调用基类的Seed()方法?若是这样,现在基类的方法已经被SampleData类实现了,这样调用岂不是又回到调用 override void Seed()? 感觉死循环了。。  新手百思不得其解,不知哪儿想错了,还望大神们赐教。谢谢!


    public class SampleData : DropCreateDatabaseIfModelChanges<MusicStoreEntities>
    {
        protected override void Seed(MusicStoreEntities context)
        {
            base.Seed(context);

            var genres = new List<Genre>
            {
                new Genre { Name = "Rock" },
                new Genre { Name = "Jazz" },
                new Genre { Name = "Metal" },
                new Genre { Name = "Alternative" },
                new Genre { Name = "Disco" },
                new Genre { Name = "Blues" },
                new Genre { Name = "Latin" },
                new Genre { Name = "Reggae" },
                new Genre { Name = "Pop" },
                new Genre { Name = "Classical" }
            };
        }
    }

------解决方案--------------------
基本语法问题
base.Method就是调用基类的方法,不会因为基类是virtual而调用子类。

如果你想知道一个方法是谁调用的,最简单的做法是在这个方法内下一个断点,运行程序到此处,然后在调用堆栈窗格中可以看到。这里Seed是被基类调用的。
------解决方案--------------------
两种方式
1.web.config配置(百度一下)
2.Global.asax文件中进行数据初始化
比如MvcMusicStore用的是第2种,Global.asax的Application_Start()方法中:

protected void Application_Start()
{
   //初始化数据
   System.Data.Entity.Database.SetInitializer(new MvcMusicStore.Models.SampleData());


   ........
}