从ASP.NET MVC或Web应用程序连接到Azure表存储的最佳实践是什么?
现在,我已经创建了一个包含CloudStorageAccount和CloudTableClient,引用的StorageContext类,如下所示:
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将用于一个流量超过1000 req/秒的高流量站点。
我还需要单元测试。像上面一样使用它,我可以传入另一个connString名称,而不是连接到单元测试中的Azure存储模拟器。
我是在正确的轨道上,还是有更好的连接方式?
发布于 2014-07-08 08:47:47
其实你的问题
从ASP.NET MVC或Web应用程序连接到Azure表存储的最佳实践是什么?
可以重述“web应用程序中使用数据访问层的最佳实践是什么”。这是一样的。
您可以找到很多关于数据访问层最佳实践的答案。但是这里的铁规则使您的数据访问层与控制器或演示文稿分离。在MVC模式范围内通过模型使用它的最佳方法,或者您可以考虑仓库和/或工作单元模式(如果您喜欢的话)。
在您的示例中,您的数据访问逻辑已经包装在StorageContext中,这很好,我将另外提取接口,并使用DI/IoC和依赖项解析器。在谈到您的代码片段时,就是这样。你在正确的道路上。
https://stackoverflow.com/questions/24626749
复制相似问题