すべての検索可能なフィールドを含むビューvw_SearchSiteを使用して全文検索を実装し、検索結果と共通のサイトIDを持つサイトを返します。
クエリ:
....。
<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)
)]
ローカルホストデータベースへの完全なアクセス許可があります。上記のコードで可能なすべての順列と組み合わせを試しましたが、解決策を見つけることができませんでした。SQL SERVER Management Studioでクエリを実行すると、クエリは完全に正常に機能しています。
これは私のユニットテストです:
public void Getsitesforsearch_returns_all_matching_sites_test(){// const string search="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 = country1; state1.Name="壁の状態"; state1.Abbreviation = "WS"; state2.Name = "crap"; 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:失敗しました
SecondaryGroupName as Secondar9_10_、site0_.StateId as StateId10_ from tg.v_Site site0_ NHibernate:device0_.Id as Id7_、device0_.DeviceTypeId as DeviceTy2_7_、device0_.Name as Name7_、device0_.NodeId as NodeId7_、device0_.SiteId as SiteId7_ device0_ NHibernate:connection0_.ConnectionId as Connecti1_6_、connection0_.RemoteIP as RemoteIP6_、connection0_.ConnectedOn as Connecte3_6_、connection0_.DisconnectedOn as Disconne4_6_、connection0_.BaseStationId as BaseStat5_6_ as BaseStat5_6_ from tg.vw_BaseConnection connection0_ NHibernate:select country0_ as Name1_ from tg.vw_Country country0_ NHibernate:INSERT INTO tg.vw_Country(Name)VALUES(@ p0); SCOPE_IDENTITY();を選択します。@ p0 ='米国'NHibernate:INSERT INTO tg.vw_State(Name、Abbreviation、CountryId)VALUES(@ p0、@ p1、@ p2); SCOPE_IDENTITY();を選択します。@ p0 ='ミネソタ'、@ p1 ='MN'、@ p2 = '347' NHibernate:NHibernate:INSERT INTO tg.vw_Country(Name)VALUES(@ p0); SCOPE_IDENTITY();を選択します。@ p0 ='米国'NHibernate:INSERT INTO tg.vw_State(Name、Abbreviation、CountryId)VALUES(@ p0、@ p1、@ p2); SCOPE_IDENTITY();を選択します。@ p0 ='ミネソタ'、@ p1 ='MN'、@ p2 = '348' NHibernate:NHibernate:INSERT INTO tg.vw_Country(Name)VALUES(@ p0); SCOPE_IDENTITY();を選択します。@ p0 ='米国'NHibernate:INSERT INTO tg.vw_Country(Name)VALUES(@ p0); SCOPE_IDENTITY();を選択します。@ p0 ='くだらない国'NHibernate:NHibernate:INSERT INTO tg.v_Site(Name、Address、City、PostalCode、Latitude、Longitude、PrimaryGroupName、SecondaryGroupName、StateId)VALUES(@ p0、@ p1、@ p2、@ p3、@ p4、@ p5、@ p6、@ p7、@ p8); SCOPE_IDENTITY();を選択します。@ p0 ='abc'、@ p1 = '12343 Testing Blvd'、@ p2 ='wallsite'、@ p3 = '33333'、@ p4 = '55'、@ p5 ='-92.2'、@ p6 ='Pri '、@ p7 ='Sec'、@ p8 ='181'NHibernate:INSERT INTO tg.v_Site(Name、Address、City、PostalCode、Latitude、Longitude、PrimaryGroupName、SecondaryGroupName、StateId)VALUES(@ p0、@ p1、@ p2、@ p3、@ p4、@ p5、@ p6、@ p7、@ p8); SCOPE_IDENTITY();を選択します。@ p0 ='サイトウォール'、@ p1 = '12343 Testing Blvd'、@ p2 ='ウォールサイト'、@ p3 = '44444'、@ p4 = '55'、@ p5 ='-92.2'、@ p6 = ' Pri'、@ p7 ='Sec'、@ p8 ='181'NHibernate:INSERT INTO tg.v_Site(Name、Address、City、PostalCode、Latitude、Longitude、PrimaryGroupName、SecondaryGroupName、StateId)VALUES(@ p0、@ p1、 @ p2、@ p3、@ p4、@ p5、@ p6、@ p7、@ p8); SCOPE_IDENTITY();を選択します。@ p0 ='site'、@ p1 = '12343 Testing Blvd'、@ p2 ='wallsite'、@ p3 = '55555'、@ p4 = '55'、@ p5 ='-92.2'、@ p6 ='Pri '、@ p7 ='Sec'、@ p8 ='180'NHibernate:INSERT INTO tg.v_Site(Name、Address、City、PostalCode、Latitude、Longitude、PrimaryGroupName、SecondaryGroupName、StateId)VALUES(@ p0、@ p1、@ p2、@ p3、@ p4、@ p5、@ p6、@ p7、@ p8); SCOPE_IDENTITY();を選択します。@ p0 ='サイトウォール'、@ p1 = '12343 Testing Blvd'、@ p2 ='walstreet'、@ p3 = '66666'、@ p4 = '55'、@ p5 ='-92.2'、@ p6 =' Pri'、@ p7 ='Sec'、@ p8 ='181 ' Pri'、@ p7 ='Sec'、@ p8 ='180'NHibernate:INSERT INTO tg.v_Site(Name、Address、City、PostalCode、Latitude、Longitude、PrimaryGroupName、SecondaryGroupName、StateId)VALUES(@ p0、@ p1、 @ p2、@ p3、@ p4、@ p5、@ p6、@ p7、@ p8); SCOPE_IDENTITY();を選択します。@ p0 ='サイトウォール'、@ p1 = '12343 Testing Blvd'、@ p2 ='walstreet'、@ p3 = '66666'、@ p4 = '55'、@ p5 ='-92.2'、@ p6 =' Pri'、@ p7 ='Sec'、@ p8 ='181 ' Pri'、@ p7 ='Sec'、@ p8 ='180'NHibernate:INSERT INTO tg.v_Site(Name、Address、City、PostalCode、Latitude、Longitude、PrimaryGroupName、SecondaryGroupName、StateId)VALUES(@ p0、@ p1、 @ p2、@ p3、@ p4、@ p5、@ p6、@ p7、@ p8); SCOPE_IDENTITY();を選択します。@ p0 ='サイトウォール'、@ p1 = '12343 Testing Blvd'、@ p2 ='walstreet'、@ p3 = '66666'、@ p4 = '55'、@ p5 ='-92.2'、@ p6 =' Pri'、@ p7 ='Sec'、@ p8 ='181 '
NHibernate:SELECT DISTINCT site.Id as Id10_0_、site.Name as Name10_0_、site.Address as Address10_0_、site.City as City10_0_、site.PostalCode as PostalCode10_0_、site.Latitude as Latitude10_0_、site.Longitude as Longitude10_0_、site.PrimaryGroupName as PrimaryG8_10_0_、site.SecondaryGroupName as Secondar9_10_0_、site.StateId as StateId10_0_ FROM v_Site site WHERE site.Id IN(SELECT Id FROM vw_SearchSite WHERE CONTAINS(vw_SearchSite。*、@ p0)); @ p0 ='abc'
SecondaryGroupName as Secondar9_10_、site0_.StateId as StateId10_ from tg.v_Site site0_ NHibernate:SELECT primarygro0_.SiteId as SiteId1_、primarygro0_.Id as Id1_、primarygro0_.Id as Id0_0_、primarygro0_.Name as Name0_0_、primarygro0_.OldId as OldId as DeviceGr4_0_0_、primarygro0_.SiteId as SiteId0_0_ FROM tg.vw_DeviceGroup primarygro0_ WHERE((primarygro0_.DeviceGroupTypeId = 1))およびprimarygro0_.SiteId = @ p0; @ p0 = '381' NHibernate:SELECT Secondaryg0_.SiteId as SiteId1_、secondaryg0_.Id as Id1_、secondaryg0_.Id as Id0_0_、secondaryg0_.Name as Name0_0_、secondaryg0_.OldId as OldId0_0_、secondaryg0_.DeviceGroupTypeId as DeviceGr4_0_0_、secondaryg FROM tg.vw_DeviceGroup Secondaryg0_ WHERE((secondaryg0_.DeviceGroupTypeId = 2))およびsecondaryg0_.SiteId = @ p0; @ p0 = '381' NHibernate:SELECT primarygro0_.SiteId as SiteId1_、primarygro0_.Id as Id1_、primarygro0_.Id as Id0_0_、primarygro0_.Name as Name0_0_、primarygro0_.OldId as OldId0_0_、primarygro0_.DeviceGroupTypeId as DeviceGr4_0_0_、primarygro0_.SiteId as SiteId ((primarygro0_.DeviceGroupTypeId = 1))およびprimarygro0_.SiteId = @ p0; @ p0 = '382' NHibernate:SELECT Secondaryg0_.SiteId as SiteId1_、secondaryg0_.Id as Id1_、secondaryg0_.Id as Id0_0_、secondaryg0_.Name as Name0_0_、secondaryg0_.OldId as OldId0_0_、secondaryg0_.DeviceGroupTypeId as DeviceGr4_0_0_、secondaryg FROM tg.vw_DeviceGroup Secondaryg0_ WHERE((secondaryg0_.DeviceGroupTypeId = 2))およびsecondaryg0_.SiteId = @ p0; @ p0 = '382' NHibernate:SELECT primarygro0_.SiteId as SiteId1_、primarygro0_.Id as Id1_、primarygro0_。Id as Id0_0_、primarygro0_.Name as Name0_0_、primarygro0_.OldId as OldId0_0_、primarygro0_.DeviceGroupTypeId as DeviceGr4_0_0_、primarygro0_.SiteId as SiteId0_0_ FROM tg.vw_DeviceGroup primarygro0_ WHERE((primarygro0_.DeviceGroupTypeId = 1)@ p0 = '383' NHibernate:SELECT Secondaryg0_.SiteId as SiteId1_、secondaryg0_.Id as Id1_、secondaryg0_.Id as Id0_0_、secondaryg0_.Name as Name0_0_、secondaryg0_.OldId as OldId0_0_、secondaryg0_.DeviceGroupTypeId as DeviceGr4_0_0_、secondaryg FROM tg.vw_DeviceGroup Secondaryg0_ WHERE((secondaryg0_.DeviceGroupTypeId = 2))およびsecondaryg0_.SiteId = @ p0; @ p0 = '383' NHibernate:SELECT primarygro0_.SiteId as SiteId1_、primarygro0_.Id as Id1_、primarygro0_.Id as Id0_0_、primarygro0_.Name as Name0_0_、primarygro0_.OldId as OldId0_0_、primarygro0_。DeviceGroupTypeId as DeviceGr4_0_0_、primarygro0_.SiteId as SiteId0_0_ FROM tg.vw_DeviceGroup primarygro0_ WHERE((primarygro0_.DeviceGroupTypeId = 1))およびprimarygro0_.SiteId = @ p0; @ p0 = '384' NHibernate:SELECT Secondaryg0_.SiteId as SiteId1_、secondaryg0_.Id as Id1_、secondaryg0_.Id as Id0_0_、secondaryg0_.Name as Name0_0_、secondaryg0_.OldId as OldId0_0_、secondaryg0_.DeviceGroupTypeId as DeviceGr4_0_0_、secondaryg FROM tg.vw_DeviceGroup Secondaryg0_ WHERE((secondaryg0_.DeviceGroupTypeId = 2))およびsecondaryg0_.SiteId = @ p0; @ p0 = '384' NHibernate:select device0_.Id as Id7_、device0_.DeviceTypeId as DeviceTy2_7_、device0_.Name as Name7_、device0_.NodeId as NodeId7_、device0_.SiteId as SiteId7_ from tg.v_Device device0_ NHibernate:select connection0_.ConnectionId as Connecti1_6_、connection0_。RemoteIP as RemoteIP6_、connection0_.ConnectedOn as Connecte3_6_、connection0_.DisconnectedOn as Disconne4_6_、connection0_.BaseStationId as BaseStat5_6_ from tg.vw_BaseConnection connection0_ NHibernate:select country0_.Id as Id1_、country0_.Name as Name1_ from tg.vw_Count CountryId as CountryId1_、states0_.Id as Id1_、states0_.Id as Id9_0_、states0_.Name as Name9_0_、states0_.Abbreviation as Abbrevia3_9_0_、states0_.CountryId as CountryId9_0_ FROM tg.vw_Statestates0_ WHEREstates0_.CountryId = @ p0; @ p0 = '347' NHibernate:SELECTstates0_.CountryId as CountryId1_、states0_.Id as Id1_、states0_.Id as Id9_0_、states0_.Name as Name9_0_、states0_.Abbreviation as Abbrevia3_9_0_、states0_.CountryId as CountryId9_0_ FROM tg.vw_ states0_.CountryId = @ p0; @ p0 = '348' NHibernate:SELECTstates0_.CountryId as CountryId1_、states0_.Id as Id1_、states0_.Id as Id9_0_、states0_.Name as Name9_0_、states0_.Abbreviation as Abbrevia3_9_0_、states0_.CountryId as CountryId9_0_ FROM tg.vw_Statestates0_ WHEREstates0_.Country @ p0 = '349' NHibernate:SELECTstates0_.CountryId as CountryId1_、states0_.Id as Id1_、states0_.Id as Id9_0_、states0_.Name as Name9_0_、states0_.Abbreviation as Abbrevia3_9_0_、states0_.CountryId as CountryId9_0_ FROM tg.vw_ states0_.CountryId = @ p0; @ p0 = '350' NHibernate:NHibernate:NHibernate:NHibernate:NHibernate:SELECTstates0_.CountryId as CountryId1_、states0_.Id as Id1_、states0_.Id as Id9_0_、states0_.Name as Name9_0_、states0_.Abbreviation as Abbrevia3_9_0_、states0_.CountryId as CountryId9_0_ FROM tg.vw_Statestates0_ WHEREstates_ ; @ p0 = '350' NHibernate:NHibernate:NHibernate:NHibernate:NHibernate:SELECTstates0_.CountryId as CountryId1_、states0_.Id as Id1_、states0_.Id as Id9_0_、states0_.Name as Name9_0_、states0_.Abbreviation as Abbrevia3_9_0_、states0_.CountryId as CountryId9_0_ FROM tg.vw_Statestates0_ WHEREstates_ ; @ 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)で.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet BulkCopyHandler、TdsParserStateObject stateObj)at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()at System.Data.SqlClient.SqlDataReader.get_MetaData() .Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds、RunBehavior runBehavior、String resetOptionsString)at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior、RunBehavior runBehavior、Boolean returnStream、System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior runBehavior、Boolean returnStream、String method、DbAsyncResult result)at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior runBehavior、Boolean returnStreamメソッド)at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior Behavior、String method)at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior Behavior)at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader( )NHibernate.Loader.Loader.GetResultSet(IDbCommand st、Boolean autoDiscoverTypes、Boolean callable、RowSelection selection、ISessionImplementor session)at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session、NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementorセッション、QueryParameters queryParameters、ブール値returnProxies)のQueryParameters queryParameters、ブール値returnProxies)NHibernate.Loader.Loader.DoList(ISessionImplementorセッション、QueryParameters queryParameters)
NHibernate.ADOException:クエリを実行できませんでし た[SELECT DISTINCT site.Id as Id10_0_、site.Name as Name10_0_、site.Address as Address10_0_、site.City as City10_0_、site.PostalCode as PostalCode10_0_、site.Latitude as Latitude10_0_、site.Longitude as Longitude10_0_、site.PrimaryGroupName as PrimaryG8_10_0_、site.SecondaryGroupName as Secondar9_10_0_、site.StateId as StateId10_0_ FROM v_Site site WHERE site.Id IN(SELECT Id FROM vw_SearchSite WHERE CONTAINS(vw_SearchSite。、?))] Name:pattern-Value:abc [SQL:SELECT DISTINCT site.Id as Id10_0_、site.Name as Name10_0_、site.Address as Address10_0_、site.City as City10_0_、site.PostalCode as PostalCode10_0_、site.Latitude as Latitude10_0_、site.Longitude as Longitude10_0_、site.PrimaryGroupName as PrimaryG8_10_0_、site.SecondaryGroupName as Secondar9_10_0_、site.StateId as StateId10_0_ FROM v_Site site WHERE site.Id IN(SELECT Id FROM vw_SearchSite WHERE CONTAINS(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)at NHibernate.Loader.Custom.CustomLoader.List(ISessionImplementor session、QueryParameters queryParameters)at NHibernate.Impl.SessionImpl.ListCustomQuery(ICustomQuery customQuery、QueryParameters queryParameters、IList results)at NHibernate.Impl.SessionImpl.List(NativeSQLQuerySpecification Spec、QueryParameters queryParameters、IList results)at NHibernate.Impl.SessionImpl.List(NativeSQLQuerySpecification spec、QueryParameters queryParameters)at NHibernate.Impl.SqlQueryImpl.List()atToro.TurfGuard.Common。SiteRepository.csのInfrastructure.DataAccess.Impl.SiteRepository.GetSitesforSearch(String search):SiteRepositoryTester.csのToro.TurfGuard.Common.IntegrationTests.Infrastructure.DataAccess.Impl.SiteRepositoryTester.Getsitesforsearch_returns_all_matching_sites_test()の33行目:line
だから、誰かがこれらの例外を処理するのを手伝ってくれるでしょうか。すぐに助けていただければ幸いです。