Как я могу принудительно заставить код Entity Framework сначала использовать SQL Server CE, когда установлен SQL Server Express? - PullRequest
3 голосов
/ 02 марта 2012

Я хотел бы сначала использовать код EF с SQL Server CE 4 из проекта ASP.NET MVC, но вместо создания моей базы данных в папке App_Data я получаю новую базу данных в экземпляре SQL Server Express, установленном на моя рабочая станция.

Как я могу вместо этого создать базу данных в папке App_Data?

web.config

 <connectionStrings>
    <add name="NerdDinners" connectionString="Data Source=|DataDirectory|NerdDinners.sdf" 
         providerName="System.Data.SqlServerCe.4.0"/>
  </connectionStrings>

Context класс:

public class NerdDinners : DbContext
{
    public DbSet<Dinner> Dinners { get; set; }
    public DbSet<RSVP> RSVPs { get; set; }
}

Редактировать 1
Я пытался остановить SQL Server Express, думая, что это может привести к использованию SQL Server CE, но это привело к ProviderIncompatibleException с внутренним исключением

{"Ошибка сети или экземпляра произошла во время установление соединения с SQL Server. Сервер не найден или был недоступен. Убедитесь, что имя экземпляра правильное и SQL Server настроен для разрешения удаленных подключений. (поставщик: SQL Сетевые интерфейсы, ошибка: 26 - Ошибка при поиске сервера / экземпляра Указано) "}

Так что, похоже, моя установка хочет использовать SQL Server Express.

Редактировать 2 Было предложено явно передать имя строки подключения в DbContext, поэтому я изменил свой контекстный класс следующим образом:

  public class NerdDinners : DbContext
    {
        public NerdDinners() : base("NerdDinners") { }

        public DbSet<Dinner> Dinners { get; set; }
        public DbSet<RSVP> RSVPs { get; set; }
    }

В DinnersController вот как создается экземпляр контекста:

public class DinnersController : Controller
    {
        private NerdDinners db = new NerdDinners();

        //
        // GET: /Dinners/

        public ViewResult Index()
        {
            return View(db.Dinners.ToList());
        }

После внесения этих изменений БД все еще создается в SQL Server Express, поэтому кажется, что моя строка подключения игнорируется.

Ответы [ 2 ]

1 голос
/ 06 марта 2012

В ASP.NET MVC есть ДВА файла web.config.Строка подключения должна быть указана в корне сайта, а не в каталоге views (где я находился).Как только я поместил строку подключения в web.config в корне проекта, моя база данных SQL Server CE была создана с использованием сначала кода и работает нормально!

0 голосов
/ 02 марта 2012

Загрузите пробную версию EFProfiler, посмотрите, видите ли вы имя строки подключения.

Убедитесь, что вышеприведенные правила соблюдены. Если вы хотите прислать мне пример проекта, я проверим его для вас, но мой работает нормально, не указывая строку подключения и не используя sql ce. Скачайте мой демонстрационный проект по ссылке выше - это сработало? Если нет, я бы поставил под сомнение двоичные файлы CE.

Ваш контекстный класс находится в том же проекте? Ваша строка подключения названа так же, как ваш контекстный класс (так и должно быть)

Другими словами, вы ваш web.config, у вас есть NerdDinners, это ваш контекстный класс на самом деле с именем NerdDinners, если нет, это должно быть или изменить идентификатор в строке соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...