我正在尝试使用代码优先方法创建数据库。当我运行以下代码时,我收到以下异常。我们怎么能克服这个?
注意:
例外:
提供程序未返回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();
}
}
}
}
答案 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>