我有這個基本的實體設置:Linq到NHibernate返回的結果不同於HQL嗎?
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();
這得到只有2個結果,其中Instrument.Id = 1
有人可以解釋在哪裏Id = 4來自Linq查詢,或NHibernate.Linq不是很穩定嗎? 謝謝!
你試過了嗎?看着NHibernate日誌的輸出?你可以將其配置爲輸出SQL。 https://www.hibernate.org/364.html。 SQL可能會給你一個線索,說明你的映射是錯誤的。 – 2010-03-03 22:25:54
出於好奇,ID = 4是數據庫返回結果中的最後一個(或可能是第一個)?它可能只是NHibernate.Linq使用的枚舉器中的一個錯誤。 – jrista 2010-03-03 22:26:11
是的最後一個添加到存儲庫。經過更多測試後,如果我使用左連接名稱做一個HQL查詢。儀器作爲inst,我得到相同的結果 – cjazz108 2010-03-03 23:21:20