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

Я пытаюсь использовать массивную "динамическую 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 - bigint PK
  • Имя - nvarchar
  • Географическое положение (тип географии - как точка)
  • ...

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

1 Ответ

8 голосов
/ 14 апреля 2011

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

...