Я использую NPoco ORM (ветвь PetaPoco), но я заметил, что в некоторых случаях он неправильно сопоставлял столбцы.
Я использую хранимую процедуру, и мои имена свойств POCO идентичны именам столбцов, созданным хранимой процедурой:
string sql = "EXEC API_GetVenueSummaryByID @@venueID = @venueID";
var venue = db.FirstOrDefault<VenueSummary>(sql, new { venueID = venueID });
Хранимая процедура представляет собой простой оператор SELECT с несколькими включенными переменными (удаление их не помогает):
DECLARE @hasOffers bit
IF EXISTS(SELECT * FROM Offers WHERE dbo.Offers.EntryType='V' AND Offers.EntryID = @VenueID AND GETDATE() <= validToDate) SET @hasOffers = 1
SELECT
Venue.VenueID, VenueName, Town, County, Country, PackageCode,
MeetingRoomsNo, MaxMeetingCapacity, BedroomsNo,
MetaDescription AS ShortDescription,
'dummyresult.jpg' AS PrimaryImageFilename,
@hasOffers AS HasSpecialOffers,
CAST(TimeStamp AS BIGINT) AS RecordVersion
FROM dbo.Venue
WHERE Venue.VenueID = @VenueID
Есть ли функция в NPoco, которая заставляет ее угадывать сопоставления (игнорируя их имена)? Если да, то как я могу отключить это и заставить его соответствовать только именам столбцов и свойств?
В настоящее время единственной работой, по-видимому, является использование атрибута column <- не работает ни
В настоящее время даже некоторая автоматическая форматирование хранимой процедуры (или любое изменение, которое приводит к изменению порядка столбцов) нарушает приложение.
Изменить 2
Я заметил, что если я перезапущу приложение веб-сайта (например, редактируя файл web.config или обновляя код приложения), то порядок столбцов исправляется. Поэтому я могу только предположить, что проблема связана с тем, что NPoco внутренне кэширует индексы столбцов - и если индексы меняются, сопоставления будут тогда неверными. Я не уверен, есть ли механизм для очистки кеша, который, возможно, не работает?
Это проблема с тем, как NPoco (и PetaPoco) кэширует кодеген, который используется для отображения из инструкции SQL в POCO.
Обычно это не проблема, если вы меняете код при изменении SQL, поскольку кеш будет перестраиваться, однако если вы сначала создадите свой POCO, а затем начнете изменять SP после первого начального запуска, сопоставления будут неверными.
Эти проблемы теперь исправлены в 2.5.83-бета, и теперь он будет искать имена столбцов и их позиции для определения ключа кеша.
Спасибо за помощь @NickG
API_GetVenueSummaryByID
.