Ошибка Entity Framework, когда SetInitializer передал стратегию - PullRequest
2 голосов
/ 17 августа 2011

Сначала я пытаюсь использовать код Entity Framework без существующей базы данных.

У меня все отлично настроено, и он создавал базу данных.

То, что я хотел сделать, это стратегия 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 Ответ

4 голосов
/ 17 августа 2011

Удалите базу данных и попробуйте снова запустить приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...