Обновление записей SQL Server 2008 с пространственными типами данных с помощью массивного ORM (ExecuteNonQuery), ошибка UdtTypeName

#c# #sql #sql-server-2008 #geospatial #massive

#c# #sql #sql-server-2008 #геопространственный #massive

Вопрос:

Я пытаюсь использовать Massive «dynamic ORM» Роба Конери для запроса моей базы данных (пока работает ОТЛИЧНО). Столкнулся с проблемой, когда добавил поле географии в свои таблицы.

Вот ошибка:
UdtTypeName property must be set for UDT parameters

Обновление (14Апр2011): Метод 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 resu<
    }
  

Конкретная строка, которая его выдает, является: result = cmd.ExecuteNonQuery();

Вот важные фрагменты таблицы:

  • placeId — bigint PK
  • Имя — nvarchar
  • Геолокация (тип географии — как точка)

Трудно найти какие-либо другие, использующие Massive, но я сообщил об ошибке на вкладке Massive GitHub Issues. Вы можете просмотреть исходный код Massive здесь.

Ответ №1:

Я не уверен, как лучше всего интегрировать это в 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