yerine sorgular ortaya çıkıyor Bu açık bir şey olabilir ama kafamı bir kaç saatliğine vuruyorum ve yanlış gittiğimi anlayamıyorum.NHibernate disjunction ve OR
NHibernate sorgusuna OR ölçütlerini ekleme ölçmek için küçük bir kod parçası çalıştırmaya çalışıyorum. Ben kimlikleri ile 1-3 tüm test nesneleri döndürmek için beklediğiniz kadar basit bir şey sadece
using (ISession session = NHibernateHelper.OpenSession())
{
ICriteria criteria = session.CreateCriteria<TestObject>();
int[] ids = {1, 2, 3};
foreach (int id in ids)
{
ICriterion criterion = Restrictions.Eq("Id", id);
criteria.Add(Restrictions.Disjunction().Add(criterion));
}
IList<TestObject> items = criteria.List<TestObject>();
return items;
}
var: Bu aldığım kodudur. Ancak, kodu çalıştırdığımda, oluşturulan sorgu ID = 1 VE ID = 2 VE ID = 3 olan bir nesne bulmaktır. Bu, şaşırtıcı bir şekilde hiçbir şey döndürmez.
Eşleme işlemi doğru şekilde yapılmış (tüm nesneleri ekleyebilir/silebilir/kaldırabilir/listeleyebilirim) ve orada bu kimlikleri olan nesneler vardır.
Açıkçası yanlış bir şey yapıyorum? Çevrimiçi gördüğüm Disjunction kullanmanın tüm örnekleri bunu bu şekilde kullanıyor gibi görünüyor. Sadece neden kullanıp kullanmayacağımı anlamıyorum AND.
Teşekkürler.
Sihirli bir tedavi çalıştı. Senin koduna baktığımda mantıklı geliyor - Ben asla bireysel OR'leri "ve-ing" olacağını düşündüm. Kodunuzdaki tek küçük değişiklik, aşağıdaki gibi birleşim oluşturuyor: Junction disjunction = Restrictions.Disjunction(); (ICriterion 'add' içermiyor). Teşekkürler! –