1

我正在尝试使用代码优先方法创建数据库。当我运行以下代码时,出现以下异常。我们怎样才能克服这一点?

笔记:

  • 我的系统上有 SQL Server 2008 R2。
  • 我没有使用任何配置文件。我假设它将使用约定创建数据库
  • 已经没有打开的连接;我刚刚重新启动系统并进行了测试。还是同样的问题。
  • EntityFramework.dll的运行时版本是 v4.0.3xxx

例外

提供者未返回 ProviderManifestToken 字符串

留言

此操作需要连接到“主”数据库。无法创建到“主”数据库的连接,因为原始数据库连接已打开并且凭据已从连接字符串中删除。提供一个未打开的连接。

内部异常

建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)

代码:

using System.Data.Entity;
namespace LijosEF
{
  public class Dinner
  {
      public int DinnerID { get; set; }
      public int Title { get; set; }
  }

  public class RSVP
  {
    public int RSVPID { get; set; }
    public int DinnerID { get; set; }

    public virtual Dinner Dinner { get; set; }
  }

  //System.Data.Entity.DbContext is from EntityFramework.dll
  public class NerdDinners : System.Data.Entity.DbContext
  {
    public DbSet<Dinner> Dinners { get; set; }
    public DbSet<RSVP> RSVPs { get; set; }
  }
}

namespace LijosEF
{
class Program
{
    static void Main(string[] args)
    {
        using (var db = new NerdDinners())
        {
            var product = new Dinner { DinnerID = 1, Title = 101 };
            db.Dinners.Add(product);
            int recordsAffected = db.SaveChanges();
        }

    }
}
}
4

3 回答 3

5

没有任何连接信息。EF 将尝试在 SQL Express 而不是 SQL Server 中创建数据库。如果你想在 SQL Server 中创建它,你需要提供一个连接字符串。

于 2012-07-20T13:43:13.393 回答
2
public class NerdDinners : System.Data.Entity.DbContext
{
    public DbSet<Dinner> Dinners { get; set; }
    public DbSet<RSVP> RSVPs { get; set; }
}

将其更改为

public class NerdDinners : System.Data.Entity.DbContext
{
    public NerdDinners(string connString):base(connString)
    {}
    public DbSet<Dinner> Dinners { get; set; }
    public DbSet<RSVP> RSVPs { get; set; }
}
于 2012-07-20T13:45:18.867 回答
2

解决和知道您在做什么的最简单方法是在您的 app.config 中添加一个 Connectionstring,如下所示:

<connectionStrings>
    <clear/>
    <add name="NerdDinners"
          providerName="System.Data.SqlClient"
          connectionString="Server=.;Database=NerdDinners;Integrated Security=True;"/>
  </connectionStrings>
于 2012-07-20T14:05:59.420 回答