3

Rob Conery による大規模な「動的 ORM」を使用して、DB にクエリを実行しようとしています (これまでのところ、うまく機能しています)。テーブルに Geography フィールドを追加したときに問題が発生しました。

エラーは次のとおりです。 UdtTypeName property must be set for UDT parameters

更新 (2011 年 4 月 14 日):例外をスローしている ADO メソッドは、例外.ExecuteNonQuery();をスローする Massive.cs のメソッドです。

    public virtual int Execute(IEnumerable<DbCommand> commands) {
        var result = 0;
        using (var conn = OpenConnection()) {
            using (var tx = conn.BeginTransaction()) {
                foreach (var cmd in commands) {
                    cmd.Connection = conn;
                    cmd.Transaction = tx;
                    result += cmd.ExecuteNonQuery();
                }
                tx.Commit();
            }
        }
        return result;
    }

それをスローする特定の行は次のとおりです。result += cmd.ExecuteNonQuery();

テーブルの重要な部分は次のとおりです。

  • PlaceId - bigint PK
  • 名前 - nvarchar
  • GeoLocation (地理タイプ - ポイントとして)
  • ...

Massive を使用している他のユーザーを見つけるのは難しいですが、私はMassive の GitHub Issues タブでエラーを報告しました。ここで Massiveのソース コードを表示できます。

4

1 に答える 1

9

これを Massive に統合する最善の方法はわかりませんが、基本的にはエラーの内容を正確に実行する必要があります。

yourGeographyParam.UdtTypeName = "Geography";

基本的に、SQL Server では、「奇妙な」パラメーターの UdtTypeName に明示的に名前を付ける必要があります。

http://devlicio.us/blogs/sergio_pereira/archive/2008/06/11/udttypename-and-net-data-types-in-sql.aspx

于 2011-04-13T23:43:06.487 に答える