Исключение сущностей: основной поставщик не смог открыть

iv'e получил хост службы wcf, на котором размещена служба на IIS7,

iv'e добавлена ​​база данных в папку App_Data,

служба ссылается на проект DAL

который содержит модель Entity Framework, сгенерированную из моего БД (БД из хоста службы WCF)

enter image description here

enter image description here

Я продолжаю получать исключение выше сущности с этим внутренним сообщением:

{"An attempt to attach an auto-named database for file C:\\Users\\eranot65\\Documents\\Visual Studio 2010\\Projects\\CustomsManager\\WcfManagerServiceHost\\App_Data\\CustomesDB.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share."}

iv'e скопировал строку подключения из DAL/app.config в WcfManagerServiceHost/Web.config

   add name="CustomesDBEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='Data Source=.\SQLEXPRESS;AttachDbFilename="C:\Users\eranot65\Documents\Visual Studio 2010\Projects\CustomsManager\WcfManagerServiceHost\App_Data\CustomesDB.mdf";Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True'" providerName="System.Data.EntityClient"      

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

   public List<Employee> GetEmployees()
    {
        List<Employee> employees = null;
        using (CustomesDBEntities entites = new CustomesDBEntities())
        {
            employees = entites.Employees.ToList<Employee>();
        }
        return employees;
    }

не похоже, что DB используется где-то еще,

(1) как я могу проверить, удерживает ли какой-либо другой процесс дескриптор моей БД?

(2) в идеях это происходит?

Ответ 1

Я хотел бы рассмотреть одну из двух вещей:

  • Создайте соединение с вашим SQL Express, либо в VS Server explorer, либо с помощью студии управления SQL, и убедитесь, что у вас еще нет базы данных под этим именем, прикрепленным к вашему серверу.

  • Перенесите свой проект из его текущего местоположения в место где-то на диске, который не зависит от пользователя (что означает не на рабочем столе, документах и ​​т.д.), например - c:\temp, c:\projects. Причина в том, что вы используете веб-приложение, а в случае его запуска в IIS личность рабочего процесса - это особый идентификатор, отличный от вашего, который может не иметь прав доступа к файлу базы данных, поскольку он расположенный в частной папке пользователя

Ответ 2

Скорее всего, проблема заключается в том, что вы одновременно открываете базу данных с помощью Visual Studio и вашего приложения. Строка подключения явно настраивает AttachDbFilename=... AttachDBFilename создает экземпляр пользователя SQL Express, прикрепленный к определенному имени файла DB для однопользовательского режима. В однопользовательском режиме только одно приложение может открывать MDF за раз.

Ответ 3

ну, ответ всегда проще, вы бы подумали

все, что я делал, это изменение на автоматически сгенерированную строку соединения

сгенерированный моделью EntityFramework, в строку соединения для поиска БД в папке App_Data​​p >

моя исходная строка подключения:

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\eranot65\Documents\Visual Studio 2010\Projects\CustomsManager\WcfManagerServiceHost\App_Data\CustomesDB.mdf&quot;
;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True'" providerName="System.Data.EntityClient"    

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

connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;
provider connection string='Data 
Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\CustomesDB.mdf;Integrated Security=True;;User Instance=True;MultipleActiveResultSets=True'"