EF代码优先:无法连接到SQL Server

时间:2012-07-20 13:32:37

标签: c# .net sql-server entity-framework ado.net

我正在尝试使用代码优先方法创建数据库。当我运行以下代码时,我收到以下异常。我们怎么能克服这个?

注意:

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

例外

  

提供程序未返回ProviderManifestToken字符串

消息

  

此操作需要连接到“master”数据库。无法   因为原始数据库创建了与'master'数据库的连接   数据库连接已打开,凭据已被删除   来自连接字符串。提供未打开的连接。

内部异常

  

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

代码:

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();
        }

    }
}
}

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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; }
}

答案 2 :(得分:2)

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

<connectionStrings>
    <clear/>
    <add name="NerdDinners"
          providerName="System.Data.SqlClient"
          connectionString="Server=.;Database=NerdDinners;Integrated Security=True;"/>
  </connectionStrings>