MVC 3 Создает новую базу данных вместо использования указанной

Я создаю новое пилотное приложение MVC 3, используя Mvc3 и MvcScaffolding NuGet, все работает гладко, пока я не захочу использовать базу данных, которая у меня уже есть. Приложение продолжает создавать базу данных в формате:

projectname.Models.projectnameContext

Я застрял здесь, мои строки подключения:

<connectionStrings>
   <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> 
   <add name="EnginesTrackingEntities" connectionString="metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=WARCHLAPPY\SQLEXPRESS;initial catalog=[EnginesTracking];integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings>

В котором указано, что моя база данных EnginesTracking.

Обновить

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

У меня все работает отлично, но когда приложение запускается, оно создает новую таблицу вместо той, которую я указал.

Единственное отличие состоит в том, что в моем проекте нет databaseEntities, вместо этого есть projectContext, для которого я не могу выполнить шаг номер 8.

Обновление 2

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

Это Model1.context.cs:

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace ErrorReportingSystem.Models{
  using System;
  using System.Data.Entity;
  using System.Data.Entity.Infrastructure;

  public partial class EnginesTrackingEntities : DbContext
  {
    public EnginesTrackingEntities()
        : base("name=EnginesTrackingEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public DbSet<Engine_Part> Engine_Part { get; set; }
    public DbSet<Engines> Engines { get; set; }
    public DbSet<Error> Error { get; set; }
    public DbSet<Has_error> Has_error { get; set; }
    public DbSet<Locations> Locations { get; set; }
    public DbSet<Operators> Operators { get; set; }
    public DbSet<sysdiagrams> sysdiagrams { get; set; }
  }
}

person KoU_warch    schedule 05.09.2012    source источник
comment
Какую строку подключения вы указываете в своем DbContext?   -  person Mark Oreta    schedule 06.09.2012
comment
@MarkOreta, что ты имеешь в виду? когда я добавляю генерацию кода для ado.net dbcontext, поле спецификации базы данных отсутствует.   -  person KoU_warch    schedule 06.09.2012
comment
Извините, я думал, что вы используете CodeFirst. Меняете ли вы имя строки подключения при ее обновлении? Можете ли вы взглянуть на сгенерированный код конструктора, он покажет, какую строку подключения он пытается использовать. Это будет выглядеть так: public Entities1() : base(name=Entities1, Entities1)   -  person Mark Oreta    schedule 06.09.2012
comment
@MarkOreta извините за опоздание, для вас есть обновление.   -  person KoU_warch    schedule 10.09.2012
comment
@MarkOreta omg, большое спасибо за комментарий. Поигравшись в перерыве, я обнаружил, что все, что мне нужно было сделать, это добавить `public ErrorReportingSystemContext() : base(name=EnginesTrackingEntities) { }` к ErrorReportingSystemContext.cs и готово!   -  person KoU_warch    schedule 10.09.2012


Ответы (2)


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

Я должен был добавить:

    public ErrorReportingSystemContext() : base("name=EnginesTrackingEntities") { }

В файл ErrorReportingSystemContext.cs в папке /Models.

Сделанный!

person KoU_warch    schedule 10.09.2012

Похоже, вы используете Code First Entity Framework. Пост, вероятно, получит наилучшую экспозицию на этом форуме. EnginesTrackingEntities — это строка подключения EF.

Одной из больших проблем при работе с кодом в первую очередь является удаление базы данных и ее повторное создание при каждом изменении ваших POCO.

Я настоятельно предпочитаю первый подход к базе данных, потому что его не так сложно развернуть (совсем не сложно), и понятно, куда вы указываете. Преимущество кода в первую очередь заключается в возможности элегантно оформить и украсить ваши POCO.

Я не совсем отвечаю на ваш вопрос из-за отсутствия информации, но помогаю направить вас. Имея немного больше информации о вашем развертывании и сущностях, я смогу помочь больше.

person Dave Alperovich    schedule 05.09.2012
comment
Отключить автоматическое удаление базы данных тривиально. Просто добавьте это в конструктор. System.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<SampleContext>()); - person Erik Funkenbusch; 06.09.2012
comment
согласованный. Можно даже изменить тип инициализации БД на тот, который удаляет таблицы вместо баз данных. Но, честно говоря, я просто предпочитаю работать с базой данных. Единственная проблема заключается в том, чтобы поддерживать настройки вашего объекта (например, атрибут), но есть обходные пути, такие как классы друзей. повторное использование базы данных с кодом сначала создает серьезные проблемы с обслуживанием. - person Dave Alperovich; 06.09.2012
comment
В EF уже более года действует система миграции, позволяющая сначала работать с кодом без потери данных. - person Erik Funkenbusch; 06.09.2012
comment
@EH, я в тупике. Я прошел через шаги, и на самом деле вы сначала используете db. Теперь я дважды в тупике, потому что сначала БД НЕ генерирует БД. На самом деле синхронизация с пустой базой данных должна удалить все ваши POCO. Я хотел бы знать, почему EF использует sqlexpress в WARCHLAPPY\SQLEXPRESS, а ApplicationServices использует локальный. Где находится sqlexpress? - person Dave Alperovich; 06.09.2012
comment
@Dave Приложение является пилотным, поэтому все работает с локального хоста. - person KoU_warch; 08.09.2012
comment
@ Дэйв, да, все, что я запускаю, находится на моей локальной машине, включая сервер SQLEXPRESS. - person KoU_warch; 08.09.2012