我有一个wcf服务主机在IIS7上托管服务,
iv'e在其App_Data文件夹中添加了一个数据库,
该服务被引用到DAL项目
包含从我的数据库生成的实体框架模型(来自WCF服务主机的数据库)
我继续使用此内部消息获取上述实体异常:
{"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)在想法中会发生这种情况吗?
答案 0 :(得分:2)
我会考虑检查两件事之一:
在VS服务器资源管理器中或使用SQL管理工作室创建与SQL Express的连接,并验证您的服务器上是否已连接了该名称的数据库。
< / LI>将您的项目从其当前位置移动到磁盘上某个非特定于用户的位置(意味着不在桌面,文档等上),例如 - 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="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"
我编辑的连接字符串:
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'"