2

本质上,我想要做的是了解 Microsoft 的 ASP.NET MVC 3.0。我正在使用 Visual Studio 2010 Ultimate。我遵循了http://www.asp.net/mvc/videos/5-minute-introduction-to-aspnet-mvc上的视频教程,它让我启动并运行,结果创建了一个访问本地数据库的网站.

问题一:

有谁知道本地数据库在哪里?我相信它在某处使用了默认的 SQLEXPRESS db。它不显示在服务器资源管理器中,也不在 App_Data 文件夹中。我在任何地方的任何文件夹中都找不到它。它是 - 据我了解 - 使用项目中的模型自动生成的,它没有告诉我它放在哪里。

问题2:

我真正想做的是把项目放到网上玩,我已经通过 AppHarbor.com 做到了。他们让您创建一个 MS SQL Server 数据库并在 Web.config 中为您提供一个替换连接字符串,但是已经替换了连接字符串并重建了解决方案 - 即使在将 AppHarbor 数据库(我很确定毫无意义)添加到服务器之后Explorer,我的网站仍然使用我找不到的难以捉摸的 SQLEXPRESS 数据库。

我在 Web.config 中所做的更改来自:

  <connectionStrings>
    <add name="ApplicationServices"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
  </connectionStrings>

到格式

<connectionStrings>
    <add name="TestDB"
         connectionString="Server=SERVER;Database=DBNAME;User ID=USERID;Password=DBPASSWORD;" />         
</connectionStrings>

问题一很高兴知道,但真正困扰我的是问题 2。我错过了哪些对数据库的引用,导致它使用了我不希望它使用并且一无所知的数据库?我认为必须有一个,尤其是因为当我从 Web.config 中完全删除连接字符串时,事情仍然运行良好。

任何帮助将不胜感激。

4

5 回答 5

3

所以我终于弄清楚了问题所在 - 在很大程度上得到了这里每个人的帮助。所以谢谢。我做错了两件事。

首先,事实证明连接字符串的名称很重要。我需要在 MVC 中设置的上下文之后命名我的连接字符串。所以我的“TestDB”是错误的,而对于我在我的问题中链接到的视频教程,连接字符串应该被称为“SportsContext”。

所以最后,我的 Web.Config 连接字符串条目如下所示:

<connectionStrings>
<add name="SportsContext" connectionString="Server=SERVER;Database=DBNAME; User ID=USERID;Password=PASSWORD" providerName="System.Data.SqlClient" />
</connectionStrings>

有趣的是,这并不是他们告诉您应该在 appharbor 上使用的内容。其次,我遗漏了另一个关键点,虽然 MVC 很乐意在 SQLEXPRESS 中为您构建数据库,但它不会为 SQL Server 做同样的事情。在 SQL Server 中自己构建它们时,您必须确保正确输入所有内容,包括自动递增的 ID 列和外键等。

这两项更改就是让我的网站启动并正常工作所需的全部内容。

于 2011-08-03T20:05:12.527 回答
1

您需要先运行 C:\WINDOWS\Microsoft.NET\Framework\\aspnet_regsql.exe

程序并将其指向您的远程(或本地)数据库

这是一个概述此内容的链接 - http://msdn.microsoft.com/en-us/library/x28wfk74.aspx

然后只需更改 web 配置条目以指向新数据库。

你需要使用

<add name="ApplicationServices" connectionString="DataSource=YourRemoteServerName;Initial
Catalog=YourDBName; Persist Security Info=True; UserID=YourUName;Password=YourPassword providerName="System.Data.SqlClient"
/>
于 2011-07-10T03:07:53.580 回答
0

有几件事要寻找...

  1. <ConnectionStrings>元素中,您可以尝试在定义任何其他连接字符串之前通过清除任何现有的连接字符串。<clear />这将清除任何可能导致问题的继承连接字符串。
  2. 由于您使用的是 MVC3,我将假设您使用的是实体框架?确保您的 DbContext (ef 4.1) 或任何其他 Context 对象已正确配置为使用“TestDB”。

至于 SQLExpress 数据库的位置,从原始连接字符串来看,它似乎正在查看您的本地 SQLExpress 服务器。

于 2011-07-10T01:43:40.173 回答
0

当我尝试使用 appharbor 进行部署时,我遇到了同样的问题。查看你的项目目录——你可能实际上有三个 web.config 文件——一个 web.config、web.config.debug 和 web.config.release。Visual Studio 2010 使用基于项目构建状态的转换来决定应用哪些转换。查看appharbor的转换测试器以了解这一点。

还要小心,因为如果您在 Entity Framework 项目中的设置有误,您可能会在每次更改模型时删除 appharbor 上的数据库。并且您已获得凭据的帐户无权重新创建该数据库。

如果您使用的是内置的 aspnet 用户模型,请确保使用 appharbor 数据库而不是本地 sqlexpress 设置它们。这是一个How-To

于 2011-07-10T01:44:24.613 回答
0

问题一:

在 Windows->Start->Run 框中键入 services.msc 并确保 SQL EXPRESS 服务已启动。

在 VS 的服务器资源管理器中:连接到数据库,选择 Sql Server,将其输入为您的服务器:.\SQLEXPRESS 然后您应该能够测试您的连接。

问题 2: HMMM 我可以通过尝试通过 web.config 从 SQLEXPRESS 更改为我的默认 SQL 实例来重现您的相同问题。EF 不断在 SQLEXPRESS 中创建数据库。有趣,但我不知道。

于 2011-07-10T00:58:04.457 回答