实体异常:底层提供程序无法打开

时间:2012-03-21 17:06:54

标签: wcf entity-framework

我有一个wcf服务主机在IIS7上托管服务,

iv'e在其App_Data文件夹中添加了一个数据库,

该服务被引用到DAL项目

包含从我的数据库生成的实体框架模型(来自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 个答案:

答案 0 :(得分:2)

我会考虑检查两件事之一:

  1. 在VS服务器资源管理器中或使用SQL管理工作室创建与SQL Express的连接,并验证您的服务器上是否已连接了该名称的数据库。

    < / LI>
  2. 将您的项目从其当前位置移动到磁盘上某个非特定于用户的位置(意味着不在桌面,文档等上),例如 - c:\ temp,c:\ projects。 ..原因是您正在运行Web应用程序,并且如果您在IIS中运行它,则工作进程的标识是除您之外的特殊标识,可能没有访问数据库文件的权限,因为它是位于用户的私人文件夹中

答案 1 :(得分:0)

问题很可能是您使用Visual Studio和您的应用程序同时打开数据库。连接字符串明确配置AttachDbFilename=..。 AttachDBFilename为单用户模式旋转附加到特定数据库文件名的SQL Express用户实例。在单用户模式下,一次只能打开一个应用程序。

答案 2 :(得分:0)

答案总是比你想的更简单

我最终做的就是改为自动生成的连接字符串

由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'"