SetInitializer传递策略时实体框架错误

时间:2011-08-16 22:39:22

标签: entity-framework entity-framework-4

我试图在没有现有数据库的情况下首先使用实体​​框架代码。

我完成了所有设置并且正在创建数据库。

我想做的是SetInitializer策略,所以我可以为一些测试数据提供种子。

我在这里关注这个例子:

http://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

所以我添加了一个这样的初始化器:

public class MyInitializer : DropCreateDatabaseIfModelChanges<MyContext>
    {
        protected override void Seed(MyContext context)
        {
            var students = new List<Student>
            {
                new Student { FirstMidName = "Carson",   LastName = "Alexander", EnrollmentDate = DateTime.Parse("2005-09-01") },
                new Student { FirstMidName = "Meredith", LastName = "Alonso",    EnrollmentDate = DateTime.Parse("2002-09-01") },
                new Student { FirstMidName = "Arturo",   LastName = "Anand",     EnrollmentDate = DateTime.Parse("2003-09-01") },
                new Student { FirstMidName = "Gytis",    LastName = "Barzdukas", EnrollmentDate = DateTime.Parse("2002-09-01") },
                new Student { FirstMidName = "Yan",      LastName = "Li",        EnrollmentDate = DateTime.Parse("2002-09-01") },
                new Student { FirstMidName = "Peggy",    LastName = "Justice",   EnrollmentDate = DateTime.Parse("2001-09-01") },
                new Student { FirstMidName = "Laura",    LastName = "Norman",    EnrollmentDate = DateTime.Parse("2003-09-01") },
                new Student { FirstMidName = "Nino",     LastName = "Olivetto",  EnrollmentDate = DateTime.Parse("2005-09-01") }
            };
            students.ForEach(s => context.Students.Add(s));
            context.SaveChanges();  
        }
    }

然后我补充道:

Database.SetInitializer<MyContext>(new MyInitializer());

Application_Start文件的Global.ascx并运行该网站。我得到了:

无法检查模型兼容性,因为EdmMetadata类型未包含在模型中。确保已将IncludeMetadataConvention添加到DbModelBuilder约定。

然后我在DataContext中找到了类似的东西:

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            modelBuilder.Conventions
            .Remove<System.Data.Entity.Infrastructure.IncludeMetadataConvention>();
        }

所以我想我发现问题我改成了:

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            //modelBuilder.Conventions
            //.Remove<System.Data.Entity.Infrastructure.IncludeMetadataConvention>();
        }

但是我仍然得到同样的错误。有什么想法吗?

修改更新:

我刚看了一眼,发现EdmMetadata表没有被填充

1 个答案:

答案 0 :(得分:4)

删除数据库并尝试再次运行该应用程序。