Исключение сущности: базовый поставщик не смог открыть - PullRequest
0 голосов
/ 21 марта 2012

у меня есть хост службы 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;
    }

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

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

(2) в идеях такое бывает?

Ответы [ 3 ]

2 голосов
/ 22 марта 2012

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

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

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

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

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

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

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

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

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'"
0 голосов
/ 21 марта 2012

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

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