0

是的,还有一个关于提供者清单令牌的问题。不幸的是,之前的所有 22 个问题对解决我的问题都没有用。我使用 MVC4 + Code First + Sql Express 开发简单的 Web 应用程序。

这是我的上下文后代:

public class MCQContext : DbContext
{
    public MCQContext()
        : base("name=ApplicationConnection")
    {

    }
    ...............
}

在这里 - 与问题相关的 web.config 的一部分:

<configuration>
  <configSections>
    <section name="entityFramework"
             type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
             requirePermission="false" />
  </configSections>

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

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="name=ApplicationConnection" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>

因此,如您所见,正确的连接字符串传递给了上下文类的基类(如果我将连接字符串重命名为“MCQContext”并且不将任何内容传递给父上下文类,则会出现相同的错误)。

我不知道如何解决它。如果我创建绝对空的 MVC4 应用程序、删除所有包(我更喜欢手动指定所需的程序集并且不使用 NuGet)并修复引用(包括对 sqlserver express 的引用),则会重现此行为。

4

1 回答 1

0

您的连接字符串的问题是:

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

您基本上是在定义要连接的“服务器”-但您并没有说要连接到文件中的哪个数据库。此外 - SQL Server Express 数据库文件的文件扩展名是 .mdf(不是 .sdf - 那是 SQL Server Compact Edition) - 您也需要考虑到这一点!(根据 OP 的评论,这是一个错字)。

您需要在连接字符串中定义一个额外的数据库=....(或 Initial Catalog=.....):

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

然后它应该工作得很好。

于 2015-06-14T12:23:19.630 回答