Проблема с подключением к базе данных - пользовательский экземпляр и проблема Entity Framework - PullRequest
2 голосов
/ 12 сентября 2011

Я создал файл модели сущности (.edmx) на основе файла .mdf в моем приложении asp.net, помещенном в мою папку App_Data.

в первую очередь моя строка подключения, созданнаямастером структуры сущностей:

<connectionStrings>
    <add name="Sales_DBEntities" 
        connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=.\SQLEXPRESS;attachdbfilename=&quot;c:\users\ext\documents\visual studio 2010\Projects\WebProject_A\WebProject_A\App_Data\Sales_DB.mdf&quot;;integrated security=True;USER INSTANCE=TRUE;multipleactiveresultsets=True;App=EntityFramework'" 
        providerName="System.Data.EntityClient" />
</connectionStrings>

Вышеуказанное помещается в файл app.config, созданный мастером.

Я также скопировал ту же строку подключения в файл web.config (я не уверен, если это необходимо).

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

Первое касалось экземпляра пользователя:

Не удалось сгенерировать пользователяэкземпляр SQL Server из-за сбоя в запуске процесса для пользовательского экземпляра.Соединение будет закрыто

Первое, что я на самом деле не понимаю, это то, что на самом деле определяет пользовательский экземпляр.

Согласно MSDN:

Пользовательский экземпляр - это отдельный экземпляр SQL Server Express Database Engine, который создается родительским экземпляром

Считается ли моя локальная база данных пользовательским экземпляром?

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

еще один пост по этому вопросу

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

Исправление

Я сделал то, что было объяснено в этом посте

, но теперь я столкнулся с новой проблемой:

Попытка присоединить автоименованиебаза данных для файла (Полный путь к файлу app_data \ my.mdf) База данных с таким именем существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC.

У меня естьЯ уже пытался удалить все файлы в

 C:\Documents and Settings\(your user account name)\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS

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

Я знаю, что этодлинный пост, но любая помощь будет оценена

спасибо заранее.

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

Прочитайте это очень хороший обзор того, что на самом деле являются пользовательскими экземплярами .

В двух словах:

  • SQL Server позволяет иметь несколько экземпляров самого себя на одном компьютере - к экземпляру по умолчанию можно получить доступ, используя только имя (или IP-адрес) компьютера-хоста - все остальные экземпляры должны быть указаны именем экземпляра (например, SQLExpress на вашем компьютере)

  • для целей разработки вы также можете создать пользовательский экземпляр - каждый пользователь получает свой отдельный экземпляр SQL Server (работает только в Express edition ) и база данных присоединяется своим именем файла (path\Sales_DB.mdf) к этому экземпляру пользователя. Этот экземпляр запускается по требованию, затем запускается и выключается, когда больше не нужен

Хотя это отлично работает для разработки, на самом деле оно не предназначено для дальнейшего использования - конечно, не для производственного использования.

В производственной среде вы хотите прикрепить файлы базы данных к реальному экземпляру SQL Server, на котором они должны работать - обычно с использованием SQL Server Management Studio. Когда вы делаете это, вы больше не обращаетесь к этой базе данных через имя файла , а вместо этого используете имя базы данных , которое было присвоено базе данных при подключении к серверу. В этом случае SQL Server будет обрабатывать все детали операций - и этот экземпляр SQL Server все время работает и не должен запускаться постоянно («по требованию»), и вы можете использовать такие вещи, как разрешения и логины для контроля доступа к базе данных.

Ваша строка подключения будет выглядеть примерно так:

<connectionStrings>
    <add name="Sales_DBEntities" 
         connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='server=YourServerNameHere;database=Sales_DB;integrated security=True;App=EntityFramework'" 
        providerName="System.Data.EntityClient" />
</connectionStrings>

Когда вы подключили базу данных к производственному (или тестируемому) экземпляру SQL Server, вам не нужно знать, какие файлы составляют базу данных, и вам не нужно указывать эти файлы - SQL Server будет позаботься об этом. Вы просто обращаетесь к базе данных через ее имя базы данных .

1 голос
/ 14 сентября 2011

Решение всегда проще, чем ожидалось:

  1. дважды щелкните файл model.edmx -> откроется дизайнер.
  2. щелкните правой кнопкой мыши дизайнер -> Update model from database.
  3. новое соединение -> Choose Database file (.mdf) под типом.
  4. Обзор -> перейдите в папку App_Data и выберите БД.
  5. скопировать строку подключения, созданную в App.config, в web.config.

до свидания.

...