我有一個使用NH 3.1的項目,並且迄今爲止一直使用QueryOver語法。NHibernate QueryOver值集合
該項目的一個方面是在一個組織範圍內的數據庫中,我擁有隻讀訪問權限並且使用了完全不同的DBMS(Oracle vs MSSQL)。所以我存儲從我的對象(FOOS)引用它們的對象(酒吧)使用標準的多對許多表
FooBars
FooID int not null PK
BarID int not null PK
我的域對象,而不是具有Iset<Bar>
,而不是具有手動映射的ISet<int> BarIDs
到FooBars
表。這可以防止NH嘗試做不可能的事情,並且一直加入到Bars表中(如果我需要它們,我可以使用BarRepository.Get()來檢索Bars的細節,在這種情況下,我會't,因爲我只需要這些ID來篩選返回的對象列表)。
鑑於IList<int> SelectedBars
我該怎麼寫QueryOver<Foo>
其中BarIDs
包含SelectedBars
中的任何元素?
SQL類似
...FROM foos INNER JOIN foobars on foo.fooID = foobars.fooID WHERE barID IN (...)
是的,我有這種徒勞的希望,也許事情會在兩年內發生改變。延遲加載將不起作用,因爲如果我不小心,它會嘗試訪問數據庫,然後嘗試將MSSQL數據庫中的表加入Oracle數據庫。但是我可以編寫一個只有ID作爲其唯一屬性的包裝類「DummyBar」......只需讓automapper忽略它即可。 –
回到這兩個月之後...我曾嘗試編寫一個BarProxy類,但是當它開始查詢「找到與此欄有關係的foos」時,SQL試圖加入BarProxy表,a)不存在,b)即使它確實存在也是空的(真實數據在外部數據庫中)。所以我想現在我們會嘗試HQL或原始SQL。 –