Сначала я пытаюсь использовать код 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 не заполняется