2

我在我的 asp.net 应用程序中创建了一个基于 .mdf 文件的实体模型文件 (.edmx),并放置在我的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 数据库引擎的单独实例

我的本地数据库是否被视为用户实例?

我真的很想对此事进行一些澄清,因为我遇到了建议将其标记为 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

并像其他帖子中建议的那样重新启动,但我仍然找不到解决这个问题的明确解决方案。

我知道这是一个很长的帖子,但任何帮助将不胜感激

提前致谢。

4

2 回答 2

3

阅读这篇关于用户实例真正含义的非常好的概述

简而言之:

  • SQL Server 允许您在一台计算机上拥有多个自身实例- 默认实例可以仅使用主机的机器名称(或 IP 地址)访问 - 所有其他实例都需要由实例名称指定(如SQLExpress在你的机器上)

  • 出于开发目的,您还可以创建一个用户实例- 每个用户都有自己单独的 SQL Server 实例(仅适用于Express 版),并且数据库通过其文件名 ( 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 会处理那。您只需通过数据库名称引用数据库。

于 2011-09-12T05:01:11.593 回答
1

解决方案总是比预期的更简单:

  1. 双击model.edmx文件->设计器将打开。
  2. 右键单击设计器 -> Update model from database
  3. 新连接 ->Choose Database file (.mdf)在 type 下。
  4. 浏览-> 转到您的App_Data文件夹,然后选择数据库。
  5. 将创建的连接字符串复制App.configweb.config.

再见。

于 2011-09-14T10:20:02.307 回答