2

我一直在使用代码优先的实体框架。我在 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 中工作,所以我不需要重新构建并记住更改代码等中的设置。

4

2 回答 2

4

这应该这样做:

public class EFDbContext : DbContext {
    public EFDbContext() : base("EFDbContext") {

    }

    public DbSet<Product> Products { get; set; }
}

您应该在 web.config 中通过上下文类的名称获得连接字符串,这样就可以了。web.config 应该在根目录中。

<connectionStrings>
    <add name="EFDbContext" connectionString="Data Source = .; Initial Catalog = ITSDB; Integrated Security = true" providerName="System.Data.SqlClient"/>
</connectionStrings>
于 2012-06-16T19:34:47.903 回答
0

如果你这样做

update-database -v 

并且它显示它正在使用 IIS express 实例而不是来自 Web.Config 的值,这意味着当本地 IIS express 实例正在运行时,EF 会感到困惑。

我有同样的问题,并通过停止/删除 IIS express 解决。

"sqllocaldb.exe stop v11.0"

"sqllocaldb.exe delete v11.0” 

跳,帮助某人!

于 2015-06-11T00:01:35.430 回答