通过Massive ORM(ExecuteNonQuery),UdtTypeName错误更新具有空间数据类型的SQL Server 2008记录

Cha*_*eus 3 c# sql geospatial sql-server-2008 massive

我正在尝试使用Rob Conery的Massive"动态ORM"来查询我的数据库(到目前为止工作很棒).当我将Geography字段添加到表格时出现问题.

这是错误: UdtTypeName property must be set for UDT parameters

更新(14Apr2011):抛出异常的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;
    }
Run Code Online (Sandbox Code Playgroud)

抛出它的具体线是: result += cmd.ExecuteNonQuery();

这是表格的重要部分:

  • PlaceId - bigint PK
  • 名称 - nvarchar
  • GeoLocation(地理类型 - 作为一个点)
  • ...

使用Massive很难找到其他人,但我确实在Massive的GitHub问题选项卡上报告了错误.您可以在此处查看Massive源代码.

Mil*_*ric 9

我不确定如何最好地将其集成到Massive中,但基本上你需要完成错误所说的内容:

yourGeographyParam.UdtTypeName = "Geography";
Run Code Online (Sandbox Code Playgroud)

基本上SQL Server需要您为"怪异"参数显式命名UdtTypeName:

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