【发布时间】:2010-03-03 22:18:05
【问题描述】:
我有这个基本的实体设置:
public class Instrument
{
public virtual int Id { get; set; }
public virtual Guid? InstrumentGuid { get; set; }
public virtual string FIPSCode { get; set; }
public virtual IList Names {get; set;}
}
public class Name
{
public virtual int Id {get; set;}
public virtual string Name {get; set;}
public virtual Instrument Instrument {get; set;}
}
映射:
public class InstrumentMap: ClassMap<Instrument>
{
public InstrumentMap()
{
Id(x => x.Id);
Map(x => x.InstrumentGuid).Not.Nullable();
Map(x => x.FIPSCode).Not.Nullable();
HasMany(x => x.Names).Casecade.All;
}
}
public class NameMap : ClassMap<Name>
{
public NameMap()
{
Id(x => x.Id);
Map(x => x.Name);
References(x => x.Instrument);
}
}
那么为什么当我执行这两个查询时会得到不同的结果呢?
var namelist = from name in Session.Linq()
where name.Instrument.Id == 1
select name;
我得到 3 个结果,2 个 Instrument.Id = 1 和 1 个 Instrument.Id = 4 vs:
var querystr = "select name From Name as name where name.Instrument.Id = 1";
var hqlresult = Session.CreateQuery(querystr).List();
这只会得到 Instrument.Id = 1 的 2 个结果。
有人能解释一下 Linq 查询中 Id = 4 的来源吗,或者 NHibernate.Linq 还不是很稳定吗? 谢谢!
【问题讨论】:
-
您是否尝试过查看 NHibernate 日志的输出?您可以将其配置为输出 SQL。 hibernate.org/364.html。 SQL 可能会为您提供有关映射错误方式的线索。
-
只是出于好奇,ID = 4 的那个是数据库返回的结果中的最后一个(或者可能是第一个)?这可能只是 NHibernate.Linq 使用的枚举器中的一个错误。
-
是的,它是最后一个添加到存储库的。经过更多测试,如果我使用 Left Join name.Instrument as inst 进行 HQL 查询,我会得到相同的结果
标签: c# linq nhibernate fluent-nhibernate hql