从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将在流量> ​​1000 req / sec的高流量站点上使用。

我还需要单元测试。像上面一样使用它,我可以传入另一个connString名称,而在单元测试中连接到Azure存储模拟器。

我是在正确的道路上还是有更好的联系方式?

最佳答案

其实你的问题


连接到Azure表存储的最佳实践是什么
从ASP.NET MVC或Web API应用程序?


可以像“在Web应用程序中使用数据访问层的最佳做法是什么”这样重新表述。这是相同的。

您可以找到许多有关数据访问层最佳实践的答案。但是这里的铁律使您的数据访问层与控制器或表示分离。在MVC模式的范围内通过模型使用它的最佳方法,或者,如果您愿意的话,也可以考虑使用存储库和/或工作单元模式。

在您的示例中,您的数据访问逻辑已经包装在StorageContext中,这很好,我将另外提取接口并为其使用DI / IoC和依赖项解析器。谈到您的代码段时就这些了。您走对了路。

10-05 20:50
查看更多