在推送代码时,我使用 Azure 和槽变量在临时数据库和生产数据库之间切换。这两个数据库将始终相同。
这是我尝试在两者之间切换的简化设置。
Web.config
<connectionStrings>
<add name=“StagingDatabase” connectionString=“YYY” />
<add name="ProductionDatabase” connectionString=“XXX” />
</connectionStrings>
常量.cs
public static DbContext getDatabase()
{
if (@Environment.GetEnvironmentVariable("isDatabaseStaging"))
{
return new StagingDatabase();
}
else
{
return new ProductionDatabase();
}
}
问题出在 Code.cs 中,因为我返回 DbContext, Entity Framework 不知道数据库中的任何表,并且不会编译,因为 dbContext 没有表的定义。
代码.cs
public class useDatabases
{
public static useDatabasesResponse useDatabasesImplementation(useDatabasesRequest request)
{
using (var db = Constants.getDatabase())
{
var table = db.Table.SingleOrDefault(a => a.id == request.id);
if (table == null)
{
return new useDatabasesResponse
{
message = “Table not found!“,
status = 200,
};
}
// do more database stuff, etc..
}
}
}
我还应该注意到,我的两个数据库都有单独的 .edmx 文件,如果我能让它们使用同一个文件,也许它会工作得很好?
最佳答案
您可以在 web.config 中定义一个连接字符串,然后将连接字符串设置为 Azure 中的一个插槽设置,而不是打开一个变量:
Web.Config
<connectionStrings>
<add name="Database" connectionString="YYY" />
</connectionStrings>
Azure 设置:
关于c# - 使用 Entity Framework 6 中的环境变量在暂存/生产数据库之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39133348/