#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 для «странных» параметров: