代码优先实体框架在初始化时没有获取web.config连接字符串

时间:2012-04-12 13:01:26

标签: sql entity-framework-4 ef-code-first

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

2 个答案:

答案 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” 

跳跃帮助某人!