c# - 使用 Entity Framework 6 中的环境变量在暂存/生产数据库之间切换

标签 c# entity-framework azure

在推送代码时,我使用 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 设置:

Azure connectionString Settings

关于c# - 使用 Entity Framework 6 中的环境变量在暂存/生产数据库之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39133348/

相关文章:

c# - 强制 IEnumerable<T> 在不调用 .ToArray() 或 .ToList() 的情况下进行评估

azure - 无法将 .SVG 文件发布到 Azure 网站

azure - Windows Azure Active Directory 自动更改密码

azure - 在 Azure 资源管理模板中创建 StorageV2 存储帐户

c# - iTextSharp 索引超出范围

c# - 是否首先调用母版页?

c# mysql - 已经有一个与此连接关联的打开的数据读取器,必须先将其关闭

c# - 如何使用 C# DateTime.TryParse(最简单的方法)

c# - EFCore 2.0 默认所有日期字段使用 datetime2

c# - Entity Framework ——高效删除所有子实体而不加载它们