Исключения в NHibernate при использовании именованного SQL-запроса для полнотекстового поиска по индексу - PullRequest
0 голосов
/ 07 июля 2010

Я реализую полнотекстовый поиск с использованием представления vw_SearchSite, в котором есть все доступные для поиска поля и сайты возврата, идентификаторы сайтов которых совпадают с результатами поиска.

запрос:

.....

<return alias="site" class="Site"/>

SELECT DISTINCT {site.*}
FROM v_Site {site}
WHERE {site}.Id IN (
  SELECT Id
  FROM vw_SearchSite
  WHERE CONTAINS(vw_SearchSite.*,:pattern)
)

реализация:

 public Site[] GetSitesforSearch(string search)
    {
        using (var session = GetSession())
        {

            var q1 = session.GetNamedQuery("SearchSite").SetString("pattern", search);
            var q2 = q1.List<Site>().ToArray();
            return q2;
        }
    }

исключение при модульном тестировании:

in expected: {site} [SELECT DISTINCT {site.*}
FROM v_Site {site}
WHERE {site}.Id IN (
  SELECT Id
  FROM vw_SearchSite
  WHERE CONTAINS(vw_SearchSite.*,:pattern)
)]

У меня есть полные права доступа к базе данных localhost.Я перепробовал все возможные комбинации и комбинации с приведенным выше кодом и не смог найти выход.запрос работает абсолютно нормально, когда я выполняю его в студии управления SQL SERVER.

Это мой модульный тест:

public void Getsitesforsearch_returns_all_matching_sites_test () {// Arrange constпоиск строки = "abc";var country = _entityBuilder.CreateCountry ();country.Name = "стена страны";var country1 = _entityBuilder.CreateCountry ();country.Name = "дрянная страна";var state1 = _entityBuilder.CreateState ();state1.Country = страна;var state2 = _entityBuilder.CreateState ();state2.Country = страна1;state1.Name = "состояние стены";state1.Abbreviation = "WS";state2.Name = "дерьмо";state2.Abbreviation = "CR";

        var site1 = _entityBuilder.CreateSite();
        var site2 = _entityBuilder.CreateSite();
        var site3 = _entityBuilder.CreateSite();
        var site4 = _entityBuilder.CreateSite();

        site1.Name = "abc";
        site1.City = "wallsite";
        site1.PostalCode = "33333";
        site1.State = state2;

        site2.State = state2;
        site2.City = "wallsite";
        site2.PostalCode = "44444";
        site2.Name = "site wall";

        site3.State = state1;
        site3.City = "wallsite";
        site3.PostalCode = "55555";
        site3.Name = "site";

        site4.City = "walstreet";
        site4.PostalCode = "66666";
        site4.Name = "site wall";
        site4.State = state2;

        PersistEntities(state1, state2, country1,country);
        PersistEntities(site1,site2,site3,site4);
        var sites = new[] {site2,site3,site4};

        //Act
        var repository = CreateRepository();
        var result = repository.GetSitesforSearch(search);

        //Assert
        result.ShouldNotContain(site1);
        result.ShouldEqual(sites) ;
        result.ShouldContain(site2);
        result.ShouldContain(site3);
        result.ShouldContain(site4);

    }

Это ошибка:

SiteRepositoryTester.Getsitesforsearch_returns_all_matching_sites_test: Failed

NHibernate: выберите deviceinst0_.Id как Id5_, deviceinst0_.Name как Name5_, deviceinst0_.Latitude as Latitude5_, deviceinst0_.Longitude as Longitude5_, deviceinst0_.InstallationDate as Installa5_5_, deviceinst0_.Id0_Iri_Did_D_I_D_D_I_D_I_D_I_D_ как для удаления устройства как устройствоPrimaryG8_5_, deviceinst0_.SecondaryGroupId в Secondar9_5_ из tg.v_DeviceInstall deviceinst0_ NHibernate: выберите basestatio0_.BaseStationId в BaseStat1_4_, basestatio0_.BaseId как BaseId4_, basestatio0_.InstalledOn как Installe3_4_, basestatio0_.SiteId как SiteId4_ из tg.vw_BaseStation basestatio0_ NHibernate: выберите threshold0_.Id, какId8_, threshold0_.ReadingTypeId как ReadingT2_8_, threshold0_.UpperBound как UpperBound8_, threshold0_.LowerBound как LowerBound8_, threshold0_.DeviceInstallId какDeviceIn5_8_ из порогового значения tg.v_Threshold0_ NHibernate: выберите state0_.Id в качестве Id9_, state0_.Name в качестве Name9_, state0_.Abbreviation в качестве Abbrevia3_9_, state0_.CountryId в качестве CountryId9_ из tg.vw_State state0_grou в качестве устройства 0_d_Ig_Og0: в качестве устройстваName0_, devicegrou0_.OldId в OldId0_, devicegrou0_.DeviceGroupTypeId как DeviceGr4_0_, devicegrou0_.SiteId в SiteId0_ из tg.vw_DeviceGroup devicegrou0_ NHibernate: выберите user0_.Id в Id2_, user0_.Username как Username2_, user0_.Password как Password2_, user0_.FirstName как FirstName2_, user0_.LastName as LastName2_ от tg.v_User user0_ NHibernate: выберите site0_.Id в качестве Id10_, site0_.Name в качестве Name10_, site0_.Address в качестве Address10_, site0_.City в качестве City10_, site0_.PostalCode в качестве PostalCode10_, site0_itudesite0_.Longitude as Longitude10_, site0_.PrimaryGroupName в качестве PrimaryG8_10_, site0_.SecondaryGroupName в качестве Secondar9_10_, site0_.StateId в качестве StateId10_ из tg.v_Site site0_ NHibernate: выберите device0_.Id в качествеId7_, device0_.DeviceTypeId в DeviceTy2_7_, device0_.Name как Name7_, device0_.NodeId как NodeId7_, device0_.SiteId как SiteId7_ из tg.v_Device device0_ NHibernate: выберите connection0_.ConnectionId в Connecti1_6_, connection0_.RemoteIP как RemoteIP6_, connection0_.ConnectedOn как Connecte3_6_, connection0_.DisconnectedOn в качестве Disconne4_6_, connection0_.BaseStationId в качестве BaseStat5_6_ из tg.vw_BaseConnection connection0_ NHibernate: выберите country0_.Id в качестве Id1_, country0_.Name в качестве Name1_ из tg.vw_Country country0_NHibernate: INSERT INTO tg.vw_Country (Name) VALUES (@ p0);выберите SCOPE_IDENTITY ();@ p0 = NHibernate 'United States': INSERT INTO tg.vw_State (Имя, Аббревиатура, CountryId) ЗНАЧЕНИЯ (@ p0, @ p1, @ p2);выберите SCOPE_IDENTITY ();@ p0 = 'Миннесота', @ p1 = 'MN', @ p2 = '347' NHibernate: NHibernate: INSERT INTO tg.vw_Country (Name) VALUES (@ p0);выберите SCOPE_IDENTITY ();@ p0 = NHibernate 'United States': INSERT INTO tg.vw_State (Имя, Аббревиатура, CountryId) ЗНАЧЕНИЯ (@ p0, @ p1, @ p2);выберите SCOPE_IDENTITY ();@ p0 = 'Миннесота', @ p1 = 'MN', @ p2 = '348' NHibernate: NHibernate: INSERT INTO tg.vw_Country (Name) VALUES (@ p0);выберите SCOPE_IDENTITY ();@ p0 = NHibernate 'United States': INSERT INTO tg.vw_Country (Name) VALUES (@ p0);выберите SCOPE_IDENTITY ();@ p0 = 'дрянная страна' NHibernate: NHibernate: INSERT INTO tg.v_Site (Имя, Адрес, Город, Индекс, Широта, Долгота, PrimaryGroupName, SecondaryGroupName, StateId) Значения (@ p0, @ p1, @ p2, @ p3, @p4, @ p5, @ p6, @ p7, @ p8);выберите SCOPE_IDENTITY ();@ p0 = 'abc', @ p1 = '12343 Тестовый бульвар', @ p2 = 'настенный сайт', @ p3 = '33333', @ p4 = '55', @ p5 = '-92.2', @ p6 = 'Pri', @ p7 =' Sec ', @ p8 =' 181 'NHibernate: INSERT INTO tg.v_Site (имя, адрес, город, почтовый индекс, широта, долгота, PrimaryGroupName, SecondaryGroupName, StateId) VALUES (@ p0, @ p1, @p2, @ p3, @ p4, @ p5, @ p6, @ p7, @ p8);выберите SCOPE_IDENTITY ();@ p0 = 'стена сайта', @ p1 = '12343 Тестовый бульвар', @ p2 = 'стены сайта', @ p3 = '44444', @ p4 = '55', @ p5 = '-92.2', @ p6 = 'Pri ', @ p7 =' Sec ', @ p8 =' 181 'NHibernate: INSERT INTO tg.v_Site (имя, адрес, город, почтовый индекс, широта, долгота, PrimaryGroupName, SecondaryGroupName, StateId) VALUES (@ p0, @ p1,@ p2, @ p3, @ p4, @ p5, @ p6, @ p7, @ p8);выберите SCOPE_IDENTITY ();@ p0 = 'site', @ p1 = '12343 Testing Blvd', @ p2 = 'wallite', @ p3 = '55555', @ p4 = '55', @ p5 = '-92.2', @ p6 = 'Pri', @ p7 =' Sec ', @ p8 =' 180 'NHibernate: INSERT INTO tg.v_Site (имя, адрес, город, почтовый индекс, широта, долгота, PrimaryGroupName, SecondaryGroupName, StateId) VALUES (@ p0, @ p1, @p2, @ p3, @ p4, @ p5, @ p6, @ p7, @ p8);выберите SCOPE_IDENTITY ();@ p0 = 'стена сайта', @ p1 = '12343 Тестовый бульвар', @ p2 = 'walstreet', @ p3 = '66666', @ p4 = '55', @ p5 = '-92.2', @ p6 = 'Pri ', @ p7 =' Sec ', @ p8 =' 181 '

NHibernate: ВЫБЕРИТЕ DISTINCT site.Id как Id10_0_, site.Name как Name10_0_, site.Address как Address10_0_, site.City as City10_0_,site.PostalCode как PostalCode10_0_, site.Latitude как Latitude10_0_, site.Longitude as Longitude10_0_, site.PrimaryGroupName как PrimaryG8_10_0_, site.SecondaryGroupName как Secondar9_10_0_, site.StateId WHITE WHITE WHITE WHITE WHITE WHITE WHITE WHITE IDE WHITE WHITING VID(vw_SearchSite. *, @ p0));@ p0 = 'abc'

NHibernate: выберите deviceinst0_.Id как Id5_, deviceinst0_.Name как Name5_, deviceinst0_.Latitude as Latitude5_, deviceinst0_.Longitude as Longitude5_, deviceinst0_., deviceinst0_.DeviceId в DeviceId5_, deviceinst0_.PrimaryGroupId как PrimaryG8_5_, deviceinst0_.SecondaryGroupId как Secondar9_5_ из tg.v_DeviceInstall deviceinst0_ NHibernate: выберите basestatio0_.BaseStationId в BaseStat1_4_, basestatio0_.BaseId как BaseId4_, basestatio0_.InstalledOn как Installe3_4_, basestatio0_.SiteId как SiteId4_ отtg.vw_BaseStation basestatio0_Nhibernate: выберите threshold0_.Id в качестве Id8_, threshold0_.ReadingTypeId в качестве ReadingT2_8_, threshold0_.UpperBound в качестве UpperBound8_, threshold0_.LowerBound в виде LowerBound8_, threshold0_.DeviceInstallI__I_I_0 в качестве своего состояния в качестве идентификатора.state0_.Name как Name9_, state0_.Abbreviation как Abbrevia3_9_, state0_.CountryId как CountryId9_ из состояния tg.vw_State0_ NHibernate: выберите devicegrou0_.Id в качестве Id0_, devicegrou0_.Name в качестве Name0_, devicegrou0_.OldId в качестве OldId0_, devicegrou0_.DeviceGroupTypeId в качестве DeviceGr4_0_gid_id_0_0_0 0NHibernate: выберите user0_.Id в качестве Id2_, user0_.Username в качестве Username2_, user0_.Password в качестве Password2_, user0_.FirstName в качестве FirstName2_, user0_.LastName в качестве LastName2_ из tg.v_User user0_ NHibernate: выберите site0_.Id в качестве Id10_, site0_.Name в качестве Name10_, site0_.Address в качестве Address10_, site0_.City в качестве City10_, site0_.PostalCode в качестве PostalCode10_, site0_.Latitude в качестве Latitude10_, site0_.Longitude в качестве Longitude10__mary_Game_Game_G_Game_G_Game_G_Group_GG_GG_RUB0 , site0_.SecondaryGroupName как Secondar9_10_, site0_.StateId как StateId10_ из tg.v_Site site0_ NHibernate: ВЫБЕРИТЕ primarygro0_.SiteId в качестве SiteId1_, primarygro0_.Id в качестве Id1_, primarygro0_.Id в качестве Id0_0_, primarygro0_.Name в качестве Name0_0_, primarygro0_.OldId в качестве OldId0_0_, primarygro0_.DeviceGroup_G0_0_0_0_0_00_00 ((primarygro0_.DeviceGroupTypeId = 1)) и primarygro0_.SiteId=@p0; @ p0 = '381' NHibernate: ВЫБЕРИТЕ вторичный g0_.SiteId в качестве SiteId1_, вторичный g0_.Id в качестве Id1_, вторичный g0_.Id в качестве Id0_0_, вторичный g0_.Name в качестве имени 0_0_, вторичный g0_.OldId в качестве OldId0_0_, вторичныйg0_.DeviceGroup_G0_0_0_00_00_0 ID ((вторичный g0_.DeviceGroupTypeId = 2)) и вторичный g0_.SiteId=@p0; @ p0 = '381' NHibernate: ВЫБЕРИТЕ primarygro0_.SiteId в качестве SiteId1_, primarygro0_.Id в качестве Id1_, primarygro0_.Id в качестве Id0_0_, primarygro0_.Name в качестве Name0_0_, primarygro0_.OldId в качестве OldId0_0_, primarygro0_.DeviceGroup_G0_0_0_0_0_00_00 ((primarygro0_.DeviceGroupTypeId = 1)) и primarygro0_.SiteId=@p0; @ p0 = '382' NHibernate: ВЫБЕРИТЕ вторичный g0_.SiteId в качестве SiteId1_, вторичный g0_.Id в качестве Id1_, вторичный g0_.Id в качестве Id0_0_, вторичный g0_.Name в качестве имени 0_0_, вторичный g0_.OldId в качестве OldId0_0_, вторичныйg0_.DeviceGroup_G0_0_0_00_00_0 ID ((вторичный g0_.DeviceGroupTypeId = 2)) и вторичный g0_.SiteId=@p0; @ p0 = '382' NHibernate: ВЫБЕРИТЕ primarygro0_.SiteId в качестве SiteId1_, primarygro0_.Id в качестве Id1_, primarygro0_.Id в качестве Id0_0_, primarygro0_.Name в качестве Name0_0_, primarygro0_.OldId в качестве OldId0_0_, primarygro0_.DeviceGroup_G0_0_0_0_0_00_00 ((primarygro0_.DeviceGroupTypeId = 1)) и primarygro0_.SiteId=@p0; @ p0 = '383' NHibernate: ВЫБЕРИТЕ вторичный g0_.SiteId в качестве SiteId1_, вторичный g0_.Id в качестве Id1_, вторичный g0_.Id в качестве Id0_0_, вторичный g0_.Name в качестве имени 0_0_, вторичный g0_.OldId в качестве OldId0_0_, вторичныйg0_.DeviceGroup_G0_0_0_00_00_0 ID ((вторичный g0_.DeviceGroupTypeId = 2)) и вторичный g0_.SiteId=@p0; @ p0 = '383' NHibernate: ВЫБЕРИТЕ primarygro0_.SiteId в качестве SiteId1_, primarygro0_.Id в качестве Id1_, primarygro0_.Id в качестве Id0_0_, primarygro0_.Name в качестве Name0_0_, primarygro0_.OldId в качестве OldId0_0_, primarygro0_.DeviceGroup_G0_0_0_0_0_00_00 ((primarygro0_.DeviceGroupTypeId = 1)) и primarygro0_.SiteId=@p0; @ p0 = '384' NHibernate: ВЫБЕРИТЕ вторичный g0_.SiteId в качестве SiteId1_, вторичный g0_.Id в качестве Id1_, вторичный g0_.Id в качестве Id0_0_, вторичный g0_.Name в качестве имени 0_0_, вторичный g0_.OldId в качестве OldId0_0_, вторичныйg0_.DeviceGroup_G0_0_0_00_00_0 ID ((вторичный g0_.DeviceGroupTypeId = 2)) и вторичный g0_.SiteId=@p0; @ p0 = '384' NHibernate: выберите device0_.Id как Id7_, device0_.DeviceTypeId в качестве DeviceTy2_7_, device0_.Name в качестве Name7_, device0_.NodeId в качестве NodeId7_, device0_.SiteId в качестве SiteId7_ из tg.v_Device device0_ NHibernate: выберите connection0_.ConnectionId в качестве Connecti1_6_, connection0_.RemoteIP в качестве RemoteIP6_, connection0_.ConnectedOn в качестве Connecte3_6_, connection0_.DisconnectedOn в качестве Disconne4_6_, connection0_.BaseStationId в качестве BaseStat5_6_ для подключения к taseNHibernate: выберите country0_.Id как Id1_, country0_.Name как Name1_ из tg.vw_Country country0_ NHibernate: ВЫБЕРИТЕ States0_.CountryId в качестве CountryId1_, States0_.Id в качестве Id1_, States0_.Id в качестве Id9_0_, States0_.Name в качестве Name9_0_, States0_.Abbreviation как Abbrevia3_9_0_, States0_.CountryId_0_0_0_0_0_0_0_0_W_W_ID ; @ p0 = '347' NHibernate: ВЫБЕРИТЕ States0_.CountryId в качестве CountryId1_, States0_.Id в качестве Id1_, States0_.Id в качестве Id9_0_, States0_.Name в качестве Name9_0_, States0_.Abbreviation как Abbrevia3_9_0_, States0_.CountryId_0_0_0_0_0_0_0_0_W_W_ID ; @ p0 = '348' NHibernate: ВЫБЕРИТЕ States0_.CountryId в качестве CountryId1_, States0_.Id в качестве Id1_, States0_.Id в качестве Id9_0_, States0_.Name в качестве Name9_0_, States0_.Abbreviation как Abbrevia3_9_0_, States0_.CountryId_0_0_0_0_0_0_0_0_W_W_ID ; @ p0 = '349' NHibernate: ВЫБЕРИТЕ States0_.CountryId в качестве CountryId1_, States0_.Id в качестве Id1_, States0_.Id в качестве Id9_0_, States0_.Name в качестве Name9_0_, States0_.Abbreviation как Abbrevia3_9_0_, States0_.CountryId_0_0_0_0_0_0_0_0_W_W_ID ; @ p0 = '350' NHibernate: NHibernate: NHibernate: NHibernate:

System.Data.SqlClient.SqlException: недопустимое имя объекта 'v_Site'.

в System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое breakConnection) в System.Data.SqlClient.SqlInternalConnection.OnError (исключение SqlException, логическое breakConnection) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj) в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) в System.Data.SqlClient.SqlDataReader.ConsumeMetaData () в System.Data.SqlClient.SqlDataReader.get_MetaData () в System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, логический returnStream, логический асинхронный) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, логический returnStream, метод String, результат DbAsyncResult) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, логический returnStream, метод String) в System.Data.SqlClient.SqlCommand.ExecuteReader (поведение CommandBehavior, метод String) в System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (поведение CommandBehavior) в System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader () в NHibernate.AdoNet.AbstractBatcher.ExecuteReader (IDbCommand cmd) в NHibernate.Loader.Loader.GetResultSet (IDbCommand st, логический autoDiscoverTypes, логический вызов, выбор RowSelection, сеанс ISessionImplementor) в NHibernate.Loader.Loader.DoQuery (сеанс ISessionImplementor, QueryParameters queryParameters, логическое returnProxies) в NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections (сеанс ISessionImplementor, QueryParameters queryParameters, логический returnProxies) в NHibernate.Loader.Loader.DoList (сеанс ISessionImplementor, QueryParameters queryParameters)

NHibernate.ADOException: не удалось выполнить запрос [ВЫБЕРИТЕ DISTINCT site.Id как Id10_0_, site.Name как Name10_0_, site.Address как Address10_0_, site.City as City10_0_, site.PostalCode as PostalCode10_0_, site.Latitude as Latitude10_0_, site.Longitude as Longitude10_0G_G_G_G_S_G_G_S_G_G_G_S_G_G_G_G_G_G_G_G_G_G_G_G_G_2_G_G_G_G_2_G_G_G_GARG.G.G. , site.SecondaryGroupName as Secondar9_10_0_, site.StateId as StateId10_0_ С сайта v_Site ГДЕ site.Id IN ( SELECT Id FROM vw_SearchSite ГДЕ СОДЕРЖИТ (vw_SearchSite. ,?) )] Название: pattern - Значение: abc[SQL: ВЫБЕРИТЕ DISTINCT site.Id как Id10_0_, site.Name как Name10_0_, site.Address в качестве Address10_0_, site.City в качестве City10_0_, site.PostalCode в качестве PostalCode10_0_, site.Latitude as Latitude10_0_, site.Longitude as Longitude10PG____ site_Longitude as Longitude10_0_ как PrimaryG8_10_0_, site.SecondaryGroupName как Secondar9_10_0_, site.StateId как StateId10_0_ С сайта v_Site ГДЕ site.Id IN ( SELECT Id FROM vw_SearchSite ГДЕ СОДЕРЖИТ (vw_SearchSite.,?) )]

в NHibernate.Loader.Loader.DoList (сеанс ISessionImplementor, QueryParameters queryParameters) в NHibernate.Loader.Loader.ListIgnoreQueryCache (сеанс ISessionImplementor, QueryParameters queryParameters) в NHibernate.Loader.Loader.List (сеанс ISessionImplementor, QueryParameters queryParameters, ISet`1 querySpaces, IType [] resultTypes) в NHibernate.Loader.Custom.CustomLoader.List (сеанс ISessionImplementor, QueryParameters queryParameters) в NHibernate.Impl.SessionImpl.ListCustomQuery (ICustomQuery customQuery, QueryParameters queryParameters, результаты IList) в NHibernate.Impl.SessionImpl.List (спецификация NativeSQLQuerySpecification, QueryParameters queryParameters, результаты IList) в NHibernate.Impl.SessionImpl.List (спецификация NativeSQLQuerySpecification, QueryParameters queryParameters) в NHibernate.Impl.SqlQueryImpl.List () в Toro.TurfGuard.Common.Infrastructure.DataAccess.Impl.SiteRepository.GetSitesforSearch (поиск строки) в SiteRepository.cs: строка 33 в Toro.TurfGuard.Common.IntegrationTests.Infrastructure.DataAccess.Impl.SiteRepositoryTester.Getsitesforsearch_returns_all_matching_sites_test () в SiteRepositoryTester.cs: строка 109

Итак, кто-нибудь может мне помочь с обработкой этих исключений. приветствуется немедленная помощь.

1 Ответ

0 голосов
/ 10 июля 2010

Правильно ли имя таблицы, v_Site?

System.Data.SqlClient.SqlException: Invalid object name 'v_Site'
...