Почему NPoco игнорирует имена столбцов и свойств и сопоставляет их почти случайно?

1

Я использую 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 внутренне кэширует индексы столбцов - и если индексы меняются, сопоставления будут тогда неверными. Я не уверен, есть ли механизм для очистки кеша, который, возможно, не работает?

  • 0
    Покажите нам API_GetVenueSummaryByID .
  • 0
    @BCdotNET Обновлено, чтобы включить хранимую процедуру.
Показать ещё 6 комментариев
Теги:
npoco
petapoco
micro-orm

1 ответ

1
Лучший ответ

Это проблема с тем, как NPoco (и PetaPoco) кэширует кодеген, который используется для отображения из инструкции SQL в POCO.

Обычно это не проблема, если вы меняете код при изменении SQL, поскольку кеш будет перестраиваться, однако если вы сначала создадите свой POCO, а затем начнете изменять SP после первого начального запуска, сопоставления будут неверными.

Эти проблемы теперь исправлены в 2.5.83-бета, и теперь он будет искать имена столбцов и их позиции для определения ключа кеша.

Спасибо за помощь @NickG

Ещё вопросы

Сообщество Overcoder
Наверх
Меню