0

すべての検索可能なフィールドを含むビュー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

だから、誰かがこれらの例外を処理するのを手伝ってくれるでしょうか。すぐに助けていただければ幸いです。

4

1 に答える 1

0

テーブル名 はv_Site正しいですか?

System.Data.SqlClient.SqlException: Invalid object name 'v_Site'
于 2010-07-10T03:46:06.010 に答える