2016-08-01 101 views
-2

我是ASP.NET MVC的新手,只是搞乱了它,并试图了解它是如何工作的。所以我决定对使用默认ApplicationDbContext访问的数据库进行查询。通常,如果数据库在此之前没有被实例化,那么这个查询将确保首先创建数据库,然后进行查询,对吗?好了,这里就是我所做的:ASP.NET MVC未能创建数据库

// This is the default Index action in the Home controller: 
public ActionResult Index() 
{ 
    var db = new ApplicationDbContext(); 
    var usersCount = db.Users.Count(); 

    return View(); 
} 

我知道查询是毫无意义的,但它的唯一目的就是为它生成数据库。事情就是这样。尝试执行查询时(方法的第二行),我得到一个System.Data.SqlClient.SqlException

即使在检查App_Data文件夹时,我看到数据库未创建。这可能是什么原因?奇怪的是,这可以在我的台式电脑上使用,但不能在我的笔记本电脑上使用。但是我注意到,当我在连接字符串中输入无效的数据源(例如Data Source =。)时,我的台式计算机上出现同样的异常。所以也许会导致这种行为的LocalDb发生了一些事情。

连接字符串:

<connectionStrings> 
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-DefaultProject-20160731061747.mdf;Initial Catalog=aspnet-DefaultProject-20160731061747;Integrated Security=True" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

这是一个完整的异常:

An exception of type 'System.Data.SqlClient.SqlException' occurred in EntityFramework.dll but was not handled in user code

Additional information: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 52 - Unable to locate a Local Database Runtime installation. Verify that SQL Server Express is properly installed and that the Local Database Runtime feature is enabled.)

我会很感激,如果有人能拿出一个解决方案!

P.S:如果将数据源更改为我的SQL Server Express服务器名称,我的笔记本电脑上的所有内容都可正常工作。

+1

这是通用数据库连接失败的问题。你的连接字符串有些问题,或者服务器没有配置为接受连接,或者防火墙阻止了它,或者SQL没有安装......等等。 – TZHX

+0

我已经经历过了。它不回答我的问题。每个ASP.NET MVC应用程序都带有一个ApplicationDbContext和Models,因此编写代码并不是问题。 @MurrayFoxcroft –

+0

我为SQL投票没有安装:否则不应该模板EF启动创建数据库,如果它不存在? OP,尝试在本地主机上设置一个带有该名称的空白数据库,然后运行它。 – jleach

回答

0

听起来像你的LocalDb实例没有安装。这是一些与某些版本的Visual Studio一起安装的“开发附件”版本的SQL,可能已被取消选择或者只是简单地不包括,也许如果原始安装较旧并且已经通过升级等等。

这篇文章给出了一个体面的说明:How to install localdb separately?

基本上google为SqlLocalDb.msi并按照说明。

无论如何,我通常更喜欢使用ExpressDb,但这取决于您。

还要注意,连接字符串被认为是web.config中MVC内容的“松散”信息。也就是说,它们往往是特定于机器的,所以如果您要更换机器(或在团队中工作),您的机器可能会有不同的连接字符串(或本地复制/部分web.config)。

+0

感谢广泛的答案,你说得很好! 我一定会尝试手动安装!我之所以想使用LocalDb,是因为我想使用Application MVC Context,ASP.NET MVC自动生成的数据库中的模型和所有好东西。你知道我怎么能做到这一点,自动生成的数据库被创建在我的SQL Server Express而不是作为LocalDb? –

+0

目标数据库应该无关紧要,无论是在localdb还是在一个快速实例中,EF/DbContext的所有东西应该都是相同的,只需将连接字符串相应地更改为指向正确的实例 – jleach

+0

因此,如果我只是更改数据源在连接字符串到我的SQL Server Express服务器名称,一切都应该没问题? –