我一直在使用代码优先的实体框架。我在web.config中定义了一个连接,其名称与我的DbContext的类名相匹配(在本例中为'MyDbContext')。
当数据库存在时,EF使用此连接没有问题。
但是,如果我删除数据库(强制EF重新创建它),EF会在本地Sql Express服务器上创建数据库。
如果我在DbContext类构造函数中指定完整的连接字符串,如
public class ReykerSCPContext : DbContext
{
public ReykerSCPContext() :
base("Server=tcp:MyDBSErver.database.windows.net,1433;Database=MyDB;User ID=#######;Password=#######;Trusted_Connection=False;Encrypt=True;MultipleActiveResultSets=True;PersistSecurityInfo=True;") { }
}
然后在所选服务器上正确创建数据库。太好了!
任何人都可以告诉我这是否是正确的行为,因为我正在抨击我的脑子。我希望所有这些都可以在web.config中工作,所以我不需要重建并记住更改代码中的设置等。
答案 0 :(得分:3)
这应该这样做:
public class EFDbContext : DbContext {
public EFDbContext() : base("EFDbContext") {
}
public DbSet<Product> Products { get; set; }
}
您应该在web.config中使用上下文类的名称建立连接字符串,并且这样做。 web.config应该是root。
<connectionStrings>
<add name="EFDbContext" connectionString="Data Source = .; Initial Catalog = ITSDB; Integrated Security = true" providerName="System.Data.SqlClient"/>
</connectionStrings>
答案 1 :(得分:0)
如果你这样做
update-database -v
它表明它正在使用IIS express实例而不是Web.Config中的值,这意味着当本地IIS express实例运行时,EF会感到困惑。
我有同样的问题,并通过停止/删除IIS express解决。
"sqllocaldb.exe stop v11.0"
"sqllocaldb.exe delete v11.0”
跳跃帮助某人!