Dapper .netはSybase 12または16との接続文字列を失う

.net dapper sqlanywhere

質問

私はSybase 12とdapper.netで働いています。このアップデートの後、私はそのような例外を得るようになりました: "System.NullReferenceException:"

トレース:

   iAnywhere.Data.SQLAnywhere.SAConnection.CalledByEntityFramework() +263
   iAnywhere.Data.SQLAnywhere.SAConnection.get_ConnectionString() +538
   Dapper.Identity..ctor(String sql, Nullable`1 commandType, IDbConnection connection, Type type, Type parametersType, Type[] otherTypes) +73
   Dapper.<QueryInternal>d__13`1.MoveNext() +545
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +381
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
   Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) +218
   Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) +88

私が接続を見たとき、私はvariablуを見ました、その接続文字列には例外があります:

'MDbConnection.ConnectionString'は 'System.NullReferenceException'型の例外をスローしました。

私はこのsybaseのアップデートで何が起こるのか理解できません。バージョン12と最新のすべての次のアップデートはすべて、dapperと同じ問題を抱えています!しかし、私がADO.Netを使用する場合 - すべて正常に動作します!

エキスパート回答

それは興味深い;関連するように見えます:

internal Identity(string sql, CommandType? commandType, IDbConnection connection, Type type, Type parametersType, Type[] otherTypes)
    : this(sql, commandType, connection.ConnectionString, type, parametersType, otherTypes, 0)
{ }

したがって、失敗している.ConnectionStringを照会するのは簡単な.ConnectionStringです。あなたは言う:

しかし、私がADO.Netを使用する場合 - すべて正常に動作します!

私は、ADO.NETを使用しているときに見てどのような理由がありませんでしたので、つまり想像 .ConnectionString接続が開いたらを。おそらく最初にやるべきこと(これをチェックできますか?)は、 .ConnectionString エラーをスローするかどうかを確認することです。

using(var conn = new WhateverConnection(connectionString)) {
    conn.Open();
    // maybe execute a command, just for fun
    Console.WriteLine(conn.ConnectionString);
}

もちろん、それが何らかの形でそれが間違ってエンティティフレームワークに関連していると考えるようにするコード内の何か他のものであるかもしれません:

iAnywhere.Data.SQLAnywhere.SAConnection.CalledByEntityFramework() +263

しかしながら!最終的には、 SAConnection実装のバグです。率直に言って、これはあなたがsybaseでログする必要があるものだと私は思う。


人気のある回答

アセンブリを逆コンパイルして、次のコードを表示します。


public override string ConnectionString
{
    get
    {
        SATrace.PropertyCall("", this._objectId);
        if (this._connStr == null)
        {
            return "";
        }
        if (SAConnectionOptions.GetAdoDotNetTesting(this._connOpts))
        {
           //.....
        }
        if (SAConnectionOptions.GetPersistSecurityInfo(this._connOpts) || base.DesignMode || SAConnection.s_isHostedByVisualStudio)
        {
            return this._connStr;
        }
        if (this.CalledByEntityFramework()) //It goes wrong here
        {
            return this._connStr;
        }
        string result;
        string text2;
        string text3;
        SAConnection.RemoveKeyValuesFromString(this._connStr, SAConnectionOptions.s_passwordKeys, false, out result, out text2, out text3);
        return result;
    }
    set
    {
        ///...
    }
}

したがって、接続文字列に以下を追加しました: ;Persist Security Info=Trueこれは、ヌル参照を引き起こしている4ではなく、3番目のifステートメントにコードを入れることを許可します。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow