我正在尝试使用 Rob Conery 的 Massive“动态 ORM”来查询我的数据库(到目前为止运行良好)。当我向表中添加 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's GitHub Issues tab 上报告了错误。您可以查看 source code for Massive here

    最佳答案

    我不确定如何最好地将它集成到 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

    关于c# - 通过 Massive ORM (ExecuteNonQuery) 更新具有空间数据类型的 SQL Server 2008 记录,UdtTypeName 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5644466/

    10-11 06:27