iki kez bir sorgu çalıştırır: NHibernate SQL Server Express 2008 tarihinde NHibernate.Linq ve Akıcı NHibernate Ben başvurulan mülkiyet (birçok kimse haritalama) üzerinde bir yüklemi kullanarak bir varlığı seçilirken ediyorum. Fetch = join, unique = true, tembel-load = false var. Log4net günlüğünü etkinleştirdim ve bu tür bir sorguyu çalıştırdığında iki aynı SQL sorgusunu günlüğe kaydeder. Sorguyu çalıştırmak bir satır döndürür ve IQueryable.Single uzantı yöntemini kullanmaya çalıştığımda, birden fazla satırın döndüğünü bildiren istisnayı atar. Ayrıca aynı sonuç ile standart IQuery.UniqueResult yöntemini kullanarak sorguyu çalıştırmayı denedim, günlüğe kaydetme ve sorguyu iki kez çalıştırma, sonra birden çok satır olduğunu belirten bir istisna atar, ancak yönetim stüdyosundaki asıl sorguyu çalıştırır bir sonuç Günlüğe kaydetmeyi devre dışı bıraktığımda aynı hatayı alıyorum. Her durumdaNHibernate günlükleri ve ben kullanıyorum aralıksız
ISession s = GetNHibernateSession();
...
var client = s.Linq<Client>().SingleOrDefault(x => x.User.ID = 17);
or
var client = s.Linq<Client>().Where(x => x.User.ID = 17);
or
var client = s.CreateQuery("from Client as c where c.User.ID = 17").UniqueResult<Client>();
şu şekildedir:
kurum ve eşleştirmeleri
class User
{
int ID;
string UserName;
}
class Client
{
int ID;
User User;
Person Person;
Address Address;
}
class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.ID);
Map(x => x.UserName);
}
}
class ClientMap : ClassMap<Client>
{
public ClientMap()
{
Id(x => x.ID);
References(x => x.User).Unique();
...
}
}
Sonra aşağıdaki gibi bir sorgu çağırmak (uygun erişim düzenleyiciler ve üye tipi varyans ima edilir) beyan edilir iki aynı sorguyu yürütür. Tembel yükü etkinleştirdiğimde, istemci tekrar iki sorgu kullanılarak yüklenir, ancak Kişi gibi bir üyeye erişildiğinde yalnızca bir ek sorgu yürütülür.
Akıcı uygunsuz bir eşleme üretme bu muhtemelen bir sonucu mudur? Veya SQL Server Express sürümü NHibernate tarafından uygun şekilde kullanılmıyor mu?
Neden eşleme ve gerçek sorgulama kodunu eklemek gerekmez. Kodunuzdaki hatayı bulmanızı kolaylaştırır. –