2014-11-25 1 views
1

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

Я работаю над проектом MVC3.

У меня есть класс DB Контекст как это:

//SpaceUpEntities.cs 
public class SpaceUpEntities: DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<Profile> Profiles { get; set; } 
    public DbSet<Venue> Venues { get; set; } 
    public DbSet<Room> Rooms { get; set; } 
    public DbSet<Category> Categories { get; set; } 
    public DbSet<Event> Events { get; set; } 
    public DbSet<Capacity> Capacities { get; set; } 
    public DbSet<VenueStatus> VenueStatuses { get; set; } 
} 

и я инициализировать DbContext при запуске приложения

//Global.asax.cs 
protected void Application_Start() 
{ 
     Database.SetInitializer<SpaceUpEntities>(null); 
     AreaRegistration.RegisterAllAreas(); 
     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 
     RegisterDependencyInjection(); 
     ModelBinders.Binders.DefaultBinder = new TrimModelBinder(); 
} 

Проблема возникает, когда я хочу, чтобы запросить/Insert/Update в БД. Например, этот фрагмент кода

//SecurityRepository.cs 
    public RegisterFeedback Register(User user, Profile profile) 
    { 
     try 
     { 
      using (var entities = new SpaceUpEntities()) 
      { 
       // Check existing email address 
       var emailExisted = entities.Users.FirstOrDefault(i => i.Email == user.Email); 
       //... So on 
      } 
     } 
     catch (Exception e) 
     { 
      Logger.Error(e); 
      return new RegisterFeedback(false, Messages.GeneralError); 
     } 
    } 

После using (var entities = new SpaceUpEntities()) организации должны были инициализированы, но я закончил с этой ошибкой

Error

Сообщение об ошибке:

Функция оценки отключена, потому что предыдущая функция оценка срок поставки. Вы должны продолжить выполнение функции повторного использования .

Первоначально я думал, что это была проблема с подключением к серверу, так что я проверил:

  1. ConnectionString
  2. установка
  3. SQL Server (SQL Server 2012)

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

Любая помощь, безусловно, будет оценена. Спасибо заранее.

Thang Do

P/S: это, как я проверил мое подключение строку: Это моя строка соединения Я тестировал его с этим ConnectionTest.udl

+0

Можете ли вы подтвердить, что ваши таблицы были созданы в базе данных и были засеяны данными? – markpsmith

+0

Таблица определенно создана. есть образцы данных в db. –

+0

Непонятно из вашего скриншота, что это за ошибка, но выполнив 'Database.SetInitializer (null);' вы отключите инициализатор базы данных. –

ответ

2

Убедитесь, что вы используете Стратегия инициализации, которая соответствует тому, чего вы пытаетесь достичь.Database.SetInitializer<T>(...);

Имея линию ниже в методе App_Start, я полагаю, вы можете быть в обход инициализации

Database.SetInitializer<SpaceUpEntities>(null); 

Вот некоторые варианты определенного article по стратегии инициализации кода первой базы данных, которые я надеюсь, будет полезным для Вас :


Есть четыре разные стратегии инициализации базы данных:

  1. CreateDatabaseIfNotExists: Инициализатор по умолчанию. Как следует из названия, он создаст базу данных, если она не существует в соответствии с конфигурацией. Однако, если вы измените класс модели, а затем запустите приложение с этим инициализатором, тогда он будет генерировать исключение.

  2. DropCreateDatabaseIfModelChanges: Это инициализатор падает существующую базу данных и создает новую базу данных, если модельные классы (классы сущностей) были изменены. Таким образом, вам не нужно беспокоиться о сохранении схемы базы данных, когда меняются классы моделей.

  3. DropCreateDatabaseAlways: Как следует из названия, этот инициализатор капля существующей базы данных каждый раз, когда вы запускаете приложение, независимо от того, изменились ли ваши модели классов или нет. Это будет полезно, когда вам нужна новая база данных при каждом запуске приложения при разработке приложения.

  4. Пользовательского DB Initializer: Вы также можете создать свой собственный инициализатор, если любой из вышеперечисленных не удовлетворяют ваши требования, или вы хотите сделать какой-либо другой процесс, который инициализирует базу данных, используя выше инициализатора

+0

У меня есть ошибка даже до того, как я получу шанс внести какие-либо изменения в БД. –

+0

Какую инициализацию вы ищете? если вы имеете в виду DBContext, то я полагаю, что у меня это есть в Global.asax.cs. в противном случае я понятия не имею и могу использовать некоторые указатели –

+1

Я имею в виду, что вы на самом деле засеваете базу данных строками или просто создаете таблицы в соответствии с объектом SpaceUpEntities datacontext? С LINQ вы не можете всегда проверять объекты-посредники так, как вы можете ожидать, если они ленивы загружены. Вы получаете фактическое исключение, или вы просто проверяете объект во время отладки? –

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