C# 多列上的NHibernate联接

C# 多列上的NHibernate联接,c#,nhibernate,nhibernate-xml-mapping,C#,Nhibernate,Nhibernate Xml Mapping,我使用的是NHibernate2.2,我想在XML映射中对两列进行简单的连接 假设我有两张桌子: SELECT t1.*, t2.ProductionDate FROM table1 JOIN table2 t2 ON t1.Name = t2.Name AND t1.Price = t2.Price 现在,我需要对两个表进行简单的选择和联接: SELECT t1.*, t2.ProductionDate FROM table1 JOIN table2 t2 ON t1.Name = t2.

我使用的是NHibernate2.2,我想在XML映射中对两列进行简单的连接

假设我有两张桌子:

SELECT t1.*, t2.ProductionDate
FROM table1
JOIN table2 t2 ON t1.Name = t2.Name AND t1.Price = t2.Price

现在,我需要对两个表进行简单的选择和联接:

SELECT t1.*, t2.ProductionDate
FROM table1
JOIN table2 t2 ON t1.Name = t2.Name AND t1.Price = t2.Price

在NHibernate中如何使用XML映射实现这一点?

在XML映射中,映射类之间的关系。仅当您的类具有如下关系时:

  class Class1
  {
    public Class2 { get; set; }
  }
您可以映射此关系。但它通常需要使用主键进行关联。还有一种方法可以使用
property ref
映射其他属性,但在那里它开始变得奇怪,尤其是当多个列进入时

无论如何,我怀疑你在课堂上是否有这种关系

因此,只能在查询中创建链接。它类似于在SQL中执行此操作的方式。请注意,HQL中的“连接”仅限于实关系(正如我在上面演示的),而不是任意的属性比较(与SQL不同,在SQL中没有区别)

HQL:

使用条件是不可能的(除非使用子查询,但不能返回ProductionDate)。除了退回到SQL之外,没有办法使其成为外部联接


评论:你可能认为NHibernate在这里帮不了什么忙。事实确实如此。原因是NHibernate是一种ORM,允许您以面向对象的方式实现业务逻辑。这里的关系不是典型的面向对象关系。这不是在纯OO设计中处理类的通常方式。

感谢您提供的信息性答案!最后,我在xml部分使用了一个查询。我是这样做的,因此我可以将代码中的引用更改为特定文件。我需要它与不同的数据库版本保持兼容。