复制 .NET Entity Framework Azure 存储的 ConnectionString 使用逻辑

Replicate .NET Entity Framework ConnectionString usage logic for Azure Storage

请考虑以下场景:

Executable -> BLL -> DAL -> SQL DB

使用 Entity Framework,您可以在 Executable 的 app.config 中声明连接字符串,并让 DbContext 后代 class 在 DAL 使用它来访问数据库,像这样:

Executable 中的连接字符串 app.config:

<connectionStrings>
    <add name="EFDBContext" connectionString="xxxx" />
</connectionStrings>

以及 DAL

中的 DbContext
Partial Public Class EFDBContext
    Inherits DbContext

    Public Sub New()
        MyBase.New("name=EFDBContext")
    End Sub
End Class

或者在 C# 中:

public partial class EFDBContext : DbContext
{
    public EFDBContext() : base("name=EFDBContext") { }
}

现在,我正在编写一个 DAL 来访问 Azure Table 存储服务(可能是队列或 Tables),截至目前,我正在从 ExecutableDAL 的 ctor(通过 BLL)。

但我开始怀疑:有没有办法像 EF 中的 DbContext 一样做到这一点?或者,有没有办法可靠地复制它?我在某种程度上更喜欢它。

谢谢

根据您的要求,我假设您可以利用 System.Configuration.ConfigurationManager 来检索您的连接字符串或应用程序设置,如下所示:

string connString=ConfigurationManager.AppSettings["<your-appsetting-key>"].ToString();
OR
string connString=ConfigurationManager.ConnectionStrings["<your-connectionstring-name>"].ConnectionString;

然后,您可以按如下方式构建 CloudStorageAccount

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connString);

对于理想的方法,我建议您可以使用 Microsoft.Azure.CloudConfigurationManager 来检索您的应用程序设置:

string connString=CloudConfigurationManager.GetSetting("<your-appsetting-key>");

这是我的代码片段,你可以参考一下。

DAL

public class AzureTableStorageUserDAL
{
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
        CloudConfigurationManager.GetSetting("<your-appsetting-key>"));
    CloudTableClient _tableClient;
    CloudTable _table;

    public AzureTableStorageUserDAL()
    {
        _tableClient = storageAccount.CreateCloudTableClient();
        _table = _tableClient.GetTableReference("Users");
        _table.CreateIfNotExists();
    }

    public UserEntity AddUser(UserEntity user)
    {
        TableOperation insertOperation = TableOperation.Insert(user);
        var result=_table.Execute(insertOperation);
        return (UserEntity)result.Result;
    }
}

实体

public class UserEntity : TableEntity
{
    public UserEntity(string lastName, string firstName)
    {
        this.PartitionKey = lastName;
        this.RowKey = firstName;
    }

    public UserEntity() { }

    public string Email { get; set; }

    public string PhoneNumber { get; set; }
}