LinqToDB如何将AccessToken添加到数据库连接

LinqToDB How to add AccessToken to database connection

我需要使用 ServicePrincipal 对使用 LinqToDB 的 SQL 服务器进行身份验证。我按照 this microsoft article 来测试设置是否正确。但是,此示例使用具有 AccessToken 属性 的 System.Data.Sqlclient.SqlConnection class,因此它可以将 AccessToken 添加到连接中。

using (var conn = new SqlConnection(sqlConnectionString))
{
    conn.AccessToken = authenticationResult.AccessToken;
    // ...
}

我正在使用 LinqToDB 并试图弄清楚在哪里可以添加从 AD 获得的 AccessTokenDataConnection (source) 没有 AccessToken 属性。

如果有人感兴趣,这里是解决方案。

  1. 创建连接工厂class,在连接对象中添加访问令牌,如下所示:

    public IDbConnection MyConnectionFactory()
    {
        ClientCredential clientCredential = new ClientCredential(ClientId,ClientSecret);
        AuthenticationContext authenticationContext = new AuthenticationContext(AuthorityUrl);
        AuthenticationResult authenticationResult = authenticationContext.AcquireTokenAsync(TargetUrl, clientCredential).Result;
        SqlConnection MyDataConnection = new SqlConnection(ConnectionString);
        MyDataConnection.AccessToken = authenticationResult.AccessToken;
    
        return MyDataConnection;
    }
    
  2. 为您的数据库创建数据提供程序:

        IDataProvider MyDataProvider = new SqlServerDataProvider("SqlServer", SqlServerVersion.v2008);
    
  3. 将这些传递到 DataConnection

  4. 的构造函数中

using (var db = new DataConnection(MyDataProvider, MyConnectionFactory))