2015-01-24 1 views
0

Я использовал этот код несколько раз раньше, и он всегда работал до этого, но в этом конкретном проекте я не могу получить Entity Framework для создайте мою базу данных.Создание db в коде EF во-первых, контекст не может использоваться во время создания модели

Когда я проверил Autos в моем классе DbContext, я нашел это:

Context can't be used while the model is being created

контекст не может быть использована в то время как модель создается. Это исключение может быть выбрано, если контекст используется внутри метода OnModelCreating или если один и тот же экземпляр контекста обращается одновременно несколькими потоками.

Вот мой OnModelCreating:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Configurations.Add(new CompanyDBConfiguration()); 
     modelBuilder.Configurations.Add(new ClientDBConfiguration()); 
     modelBuilder.Configurations.Add(new QuoteDBConfiguration()); 
     modelBuilder.Configurations.Add(new RoleDBConfiguration()); 
     modelBuilder.Configurations.Add(new UserDBConfiguration()); 
     modelBuilder.Configurations.Add(new InvoiceDBConfiguration()); 
     modelBuilder.Configurations.Add(new JobDBConfiguration()); 
     modelBuilder.Configurations.Add(new JobStatusDBConfiguration());    
    } 

А вот пример одного из этих конфигураций:

public class CompanyDBConfiguration : DBBaseObject<Company> 
{ 

    public CompanyDBConfiguration() 
     : base() 
    { 
     Property(p => p.Companame) 
      .HasColumnName("sCompanyname") 
      .IsRequired(); 

     Property(p => p.ContactPerson) 
      .HasColumnName("sContactPerson") 
      .IsRequired(); 

     Property(p => p.ContactNumber) 
      .HasColumnName("sContactNumber") 
      .IsRequired(); 

     Property(p => p.EmailAddress) 
      .HasColumnName("sEmailAddress") 
      .IsRequired(); 

     Property(p => p.PhysicalAddress) 
      .HasColumnName("sPhysicalAddres") 
      .IsRequired(); 

     Property(p => p.LicenseKey) 
      .HasColumnName("sLicenseKey") 
      .IsRequired(); 

     Property(p => p.LicenseDate) 
      .HasColumnName("dtLicenseDate") 
      .HasColumnType("datetime") 
      .IsRequired(); 

     ToTable("Companies"); 
    } 
} 

Может кто-нибудь помочь мне понять, что здесь происходит? Как я уже сказал, он работает в каждом другом проекте, в котором я это сделал, поэтому почему это не работает здесь?

Заранее благодарен!

ответ

0

Что делает ToTable («Компании»); делать?

Я уверен, что проблема заключается в том, что вы не должны выполнять дополнительную работу, помимо создания контекста данных, особенно когда вы вызываете контекст в этом методе.

+0

Как последнее усилие, я полностью прокомментировал метод OnModelCreating, и он сработал. У меня были некоторые другие проблемы для сортировки (значения null datetime, дающие мне ошибки в отношении отношений, например), но теперь все работает – Ortund

+0

Это не очень хорошая идея. Проблемы, о которых вы сообщаете, скорее всего являются результатом этого действия. Можете ли вы рассказать, что происходит в этом методе? – hbulens

Смежные вопросы