复制 .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),截至目前,我正在从 Executable
到 DAL
的 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; }
}
请考虑以下场景:
Executable -> BLL -> DAL -> SQL DB
使用 Entity Framework,您可以在 Executable
的 app.config 中声明连接字符串,并让 DbContext
后代 class 在 DAL
使用它来访问数据库,像这样:
Executable
中的连接字符串 app.config:
<connectionStrings>
<add name="EFDBContext" connectionString="xxxx" />
</connectionStrings>
以及 DAL
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),截至目前,我正在从 Executable
到 DAL
的 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; }
}