在数据库上下文上执行Elastic Sc​​ale多分片查询

Jan*_*n_V 6 c# entity-framework linq-to-sql azure-elastic-scale azure-sql-database

我正忙于在我正在进行的一个项目中实施新的Elastic Sc​​ale技术.这项技术似乎解决了我们在设计新应用程序基础时遇到的一些复杂问题.

到目前为止,这些示例看起来很棒,我正忙着在新创建的DAL中实现它.

对于我们的应用程序,我们不能仅依赖Azure中的Elastic Sc​​ale.应用程序必须能够在单个实例计算机上运行,​​也可以在内部运行.因此,我创建了以下代码来查询数据库,该数据库运行良好,也使用Elastic Sc​​ale.

public IEnumerable<AnEntity> All()
{
    var dbConnection = GetConnection();
    using (var context = new OurDatabaseContext(dbConnection))
    {
        var theEntities = context.EntityTable;
        return theEntities.ToArray();
    }
}
private IDbConnection GetConnection()
{
    var connectionInstance = connection[ConnectionStringNames.TheDatabase];
    var dbConnection = connectionInstance.Create();
    return dbConnection;
}
Run Code Online (Sandbox Code Playgroud)

connectionInstance通过IoC的配置,这将创造一个IDbConnection我们可以在使用OurDatabaseContext.一切都非常简单明了.

我面临的主要问题是MultiShardConnection由Elastic Sc​​ale提供并在示例中实现.

所以我的问题是,是否可以使用MultiShardConnection数据库上下文(如LINQ2SQL(我们正在使用)或EF).

如果没有,是唯一的解决方案,使用MultiShardConnectionMultiShardCommand?或者什么时候可以使用这样的功能?

小智 1

据我目前所知,没有简单的方法可以与 dbContext 建立多分片连接。

从示例来看,使用 MultiShardConnection + MultiShardCommand 非常简单。但是,并非所有方法都可用(例如 ReadAsync)。

但是,我认为大多数多分片连接可以通过使用正确的分片键(映射键)来绕过。我通过向 ShardMapManager 添加一个分片键解决了我的问题。如果您想描述您需要 MultiShard Connection 的具体原因,请编辑我的帖子。始终可以选择创建多个 dbContext。