我有在標準API調用setFetchMode調用一個問題,下面的查詢:調用setFetchMode呼叫忽略
DetachedCriteria.For<User>()
.Add<User>(u => u.Status == UserStatus.Live)
.CreateAlias("UniqueId", "uid")
.CreateAlias("Companies", "comp")
.Add(Restrictions.Disjunction()
.Add(Restrictions.Like("uid.Uid", context.Text, MatchMode.Anywhere))
.Add(Restrictions.Like("comp.Name", context.Text, MatchMode.Anywhere)))
.SetFetchMode("Companies", FetchMode.Eager));
我的課表:
public class User : EntityBase<int>
{
public virtual UniqueId UniqueId { get; set; }
public virtual ISet<Company> Companies { get; set; }
}
public class Company : EntityBase<int>
{
public virtual string Name { get; set; }
}
public class UniqueId : EntityBase<int>
{
public virtual string Uid { get; set; }
}
和映射
public sealed class UserMap : ClassMap<User>
{
public UserMap()
{
Table("users");
Id(x => x.Id).GeneratedBy.Native().Column("id");
References(x => x.UniqueId).Column("int_unique_id_ref");
HasMany(x => x.Companies)
.KeyColumn("user_id")
.Inverse()
.AsSet();
}
}
public sealed class CompanyMap : ClassMap<Company>
{
public CompanyMap()
{
Table("company");
Id(x => x.Id).GeneratedBy.Native().Column("id");
Map(x => x.Name).Column("name");
}
}
public sealed class UniqueIdMap : ClassMap<UniqueId>
{
public UniqueIdMap()
{
Table("tbl_trading_partner_unique_id");
Id(x => x.Id).GeneratedBy.Native().Column("int_id");
Map(x => x.Uid).Column("str_unique_id");
}
}
但是,讓用戶後列表Nhibernate再次查詢數據庫,以便再次爲每個用戶獲取公司集合。 NHibernate的只是忽略調用setFetchMode的電話,因爲我曾嘗試寫這樣的事情:
.SetFetchMode("NotExistingProp", FetchMode.Eager)
NHibernate的不thows任何異常。
我也試圖在映射中將Lazy設置爲false,但它也沒有幫助。 不知道如何解決它,可以有人
和之後,Nhibernate加載與實體的集合。但他仍然無視SetFetchMode,我可以在那裏寫任何東西。
發佈單獨回答您的解決方案,並接受它。 – Restuta 2010-10-09 19:56:18
不能接受我自己的答案:) – Sly 2010-10-13 07:11:13