У меня есть пользовательские настройки инициализатора следующим образом:
public class PromptIfChangesNeededDBInitializer : IDatabaseInitializer<MeyerREContext>
{
public PromptIfChangesNeededDBInitializer()
{ // This constructor is called properly
}
#region IDatabaseInitializer<TContext> Members
public void InitializeDatabase(MeyerREContext context)
{ // This is never called
... Code that checks existence and seeds etc
}
}
Вот мой класс DbContext
public class MeyerREContext : DbContext
{
static MeyerREContext()
{
Database.SetInitializer(new PromptIfChangesNeededDBInitializer());
}
public DbSet<Address> Addresses { get; set; }
... More DbSet property definitions
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new AddressMap());
... More Configurations
}
}
Это первый вызов контекста
City city = dbNew.Cities.Where(e=>e.CityName=="Foley").FirstOrDefault();
Конструктор Initializer вызывается правильно, что подтверждается точкой останова, OnModelCreating работает правильно, что подтверждается точкой останова, но после завершения OnModelCreating InitializeDatabase никогда не вызывается ...
Я удалил Database.SetInitializer (новый вызов PromptIfChangesNeededDBInitializer ()) из ctor DBContext в ctor вызывающего класса ДО любых вызовов контекста, и теперь я получаю немного другое поведение:
public class CreateData
{
private VFPModelContainer db = new VFPModelContainer();
private MeyerREContext dbNew;
public CreateData()
{
Database.SetInitializer(new PromptIfChangesNeededDBInitializer<MeyerREContext>());
dbNew = new MeyerREContext();
dbNew.Database.Initialize(force: true); NUll Exception here now...
}
В коде EF Framework теперь генерируется нулевое исключение:
Вот деталь исключения:
System.NullReferenceException occurred
Message=Object reference not set to an instance of an object.
Source=EntityFramework
StackTrace:
at
System.Data.Entity.ModelConfiguration.Configuration.Properties.Navigation.NavigationPropertyConfiguration.ValidateConsistency(NavigationPropertyConfiguration navigationPropertyConfiguration)
InnerException:
Похоже, что исключение происходит в одном из вызовов EntityTypeConfiguration, но исключение каким-то образом проглатывается? Как я могу выяснить, какой это вызов? В этой модели около 100 объектов ...
Как получить больше информации о том, что пошло не так внутри EF? Мне нужно знать, с какими навигационными свойствами возникают проблемы ... Я думаю, проблема в том, что EF создает фоновые рабочие потоки для создания и проверки модели, но я не понимаю, почему исключение слишком неопределенное ??
Есть идеи?
Спасибо
Грег