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

Я пытаюсь использовать Massive "динамический ORM" Роба Конери для запроса моей базы данных (пока работает GREAT). Я столкнулся с проблемой, когда я добавил поле Geography в свои таблицы.

Вот ошибка: 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 result;
    }

Конкретная строка, которая бросает это: result += cmd.ExecuteNonQuery();

Вот важные биты таблицы:

  • PlaceId - Бигинт ПК
  • Имя - нварчар
  • Географическое положение (тип географии - как точка)
  • ...

С помощью 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

Другие вопросы по тегам