我有一个使用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。 –