不确定如何使用Fluent NHibernate连接表
我在遗留表上使用NHibernate,在查看了我们的代码库之后,我似乎是唯一有这种需要的人。我需要连接两个表以便运行查询,但我今天没有取得任何进展。我将尝试在代码片段中对有意义的地方进行缩写。想帮忙吗 表格--不确定如何使用Fluent NHibernate连接表,nhibernate,fluent-nhibernate,nhibernate-mapping,linq-to-nhibernate,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Linq To Nhibernate,Fluent Nhibernate Mapping,我在遗留表上使用NHibernate,在查看了我们的代码库之后,我似乎是唯一有这种需要的人。我需要连接两个表以便运行查询,但我今天没有取得任何进展。我将尝试在代码片段中对有意义的地方进行缩写。想帮忙吗 表格-- Order OrderID (primary key) OrderName OrderType OrderLocation OrderAppendix ID (composite key) Key (composite key) Value (composite key)
Order
OrderID (primary key)
OrderName
OrderType
OrderLocation
OrderAppendix
ID (composite key)
Key (composite key)
Value (composite key)
[Serializable]
public class Order
{
public virtual string OrderID { get; set; }
...
public virtual string OrderLocation { get; set; }
}
[Serializable]
public class OrderAppendix
{
public virtual string ID { get; set; }
public virtual string Key { get; set; }
public virtual string Value { get; set; }
public override bool Equals(object obj)
{
...
}
public override int GetHashCode()
{
...
}
}
OrderAppendix复合键的ID部分与Order表中的OrderID相关联;因此,在OrderAppendix表中,和Order可以有多个条目
域对象--
Order
OrderID (primary key)
OrderName
OrderType
OrderLocation
OrderAppendix
ID (composite key)
Key (composite key)
Value (composite key)
[Serializable]
public class Order
{
public virtual string OrderID { get; set; }
...
public virtual string OrderLocation { get; set; }
}
[Serializable]
public class OrderAppendix
{
public virtual string ID { get; set; }
public virtual string Key { get; set; }
public virtual string Value { get; set; }
public override bool Equals(object obj)
{
...
}
public override int GetHashCode()
{
...
}
}
映射
internal sealed class OrderMap : ClassMap<Order>
{
Table("Order");
Id(x => x.OrderID).Column("OrderID").Length(20).GeneratedBy.Assigned();
Map( x => x.OrderName).Column("OrderName")
....
}
internal sealed class OrderAppendixMap : ClassMap<OrderAppendix>
{
Table("OrderAppendix");
CompositeId()
.KeyProperty(x => x.ID, "ID")
....
Map( x => x.ID).Column("ID);
...
}
编辑
这里是我通过阅读“QueryOver”文档得到的信息
Order=null;
OrderAppendix OrderAppendix=null;
resultList=session.QueryOver(()=>Order)
.JoinAlias(()=>Order.OrderAppendix,()=>OrderAppendix)
.Where(()=>OrderAppendix.Key==“匹配此”)
.List();
我认为使用别名加入表是正确的,但显然我还没有找到一种方法来通知NHibernate所需的多对一映射。另外,您可以看到,为了使用别名功能,我在Order中添加了OrderAppendix类型的属性 好吧,我不明白为什么你们不使用标准的亲子方法,在订单端使用HasMany,并参考附录。这是因为附录侧的复合键 如果您愿意这样做,您将能够提供以下HQL:
从订单o中选择o
左连接获取o.apxs a
其中a.Key=“Stuff”
如果我能在运行时只为这一个查询连接表,我也会更愿意这样做。