Обновление записей 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 для "странных" параметров: