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