【发布时间】:2011-10-28 04:17:30
【问题描述】:
我正在使用 Fluent NHibernate 构建一个简单的 POC 应用程序,试图证明它可以完成我们当前的手动数据访问工具的所有工作等等。我的老板担心的边缘情况之一是能够在一个查询中访问同一数据库中的多个模式。到目前为止,只要查询一次只触及一个模式,我就能够从两种模式中的表中提取数据。如果我尝试执行一个将两个模式中的表连接起来的命令,它就会爆炸。
根据我看到的错误消息,我认为问题不在于跨模式加入,而是因为我需要加入表的两个字段都是非关键字段.这两个表的结构是这样的:
客户(在模式 1 中) -------- int CustomerId(主键) 字符串名称 ...其他领域 顺序(在模式 2 中) -------- int OrderId(主键) 字符串客户名称 ...其他领域直接使用 sql 我可以加入 Name/CustomerName 字段并从两个表中获取数据。但是,使用 NHibernate 在尝试从 Order 表中提取数据并包含 Customer 表中的数据时,我不断收到“System.FormatException:输入字符串格式不正确”。这让我相信 NHibernate 正在尝试加入 CustomerName 字段和 CustomerId 字段。
我知道如何告诉它在我的 Order 映射中使用 CustomerName 字段,但我想不出一种方法来告诉它加入 Customer 表的 Name 字段。
我的映射如下所示:
public class CustomerMap : ClassMap<Customer>
{
public CustomerMap()
{
Id(x => x.Id)
.Column("CustomerId");
Map(x => x.Name);
}
}
public class OrderMap : ClassMap<Order>
{
public OrderMap()
{
Schema("schema2");
Id(x => x.Id)
.Column("OrderID");
Map(x => x.CustomerName)
.Column("CustomerName");
References<Customer>(x => x.Customer, "CustomerName");
}
}
为了得到我想要的结果而编写的 SQL 类似于:
select o.OrderId, o.CustomerName, c.CustomerId
from order o
inner join customer c on c.Name = o.CustomerName
这甚至可能吗? 有没有其他/更好的方法来解决这个问题?
【问题讨论】:
标签: nhibernate fluent-nhibernate