从ASP.NET MVC或Web API应用程序连接到Azure表存储的最佳做法是什么?
现在我已经创建了一个StorageContext类,其中包含对 CloudStorageAccount 和 CloudTableClient 的引用,如下所示:
public class StorageContext
{
private static CloudStorageAccount _storageAccount;
private static CloudTableClient _tableClient;
public StorageContext() : this("StorageConnectionString") { }
public StorageContext(string connectionString)
{
if (_storageAccount == null)
_storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings[connectionString].ConnectionString);
if (_tableClient == null)
_tableClient = _storageAccount.CreateCloudTableClient();
}
public CloudTable Table(string tableName)
{
var table = _tableClient.GetTableReference(tableName);
table.CreateIfNotExists();
return table;
}
}
我的控制器我这样使用它:
public class HomeController : ApiController
{
private StorageContext db;
public HomeController() : this(new StorageContext()) { }
public HomeController(StorageContext context)
{
this.db = context;
}
public IHttpActionResult Get()
{
var table = db.Table("users");
var results = (from user in table.CreateQuery<User>()
select user).Take(10).ToList();
return Ok<List<User>>(results);
}
}
这是首选方式吗?
API将用于&gt;的高流量网站上。 1000 req / sec。
我还需要单元测试。像上面一样使用它我可以传入另一个connString名称,而是在我的单元测试中连接到Azure存储模拟器。
我是在正确的轨道上还是有更好的连接方式?
答案 0 :(得分:1)
其实你的问题
连接Azure表存储的最佳做法是什么? 从ASP.NET MVC或Web API应用程序?
可以重述为“在Web应用程序中使用数据访问层的最佳做法是什么”。它是一样的。
您可以找到有关数据访问层最佳做法的大量答案。但是,铁规则会将您的数据访问层与您的控制器或演示文稿分开。在MVC模式范围内通过Model使用它的最佳方法,或者如果你喜欢它,你可以考虑Repository和/或Unit of work模式。
在您的示例中,您的数据访问逻辑已经包含在StorageContext中,这很好,我还会提取接口并使用DI / IoC和依赖解析器。这就是谈论你的代码片段时的全部内容。你是正确的。