Я хочу сделать самую простую работу: получить продукты, которые называют «Картофель».
// solution 1 - Using Expression.Eq
return session.CreateCriteria<Product>().Add(Expression.Eq("Name", "Potatoes")).List<Product>();
// solution 2 - Using Example
Product exampleProduct = new Product();
exampleProduct.Name = "Potatoes";
return session.CreateCriteria<Product>().Add(Example.Create(exampleProduct)).List<Product>();
Решения 1 и 2 должны быть равны. Почему Решение 1 возвращает один объект, а Решение 2 возвращает ноль объектов?
EDIT
Нашел решение, основанное на ответе Диего. Я не знал, как показать SQL, сгенерированный NHibernate при использовании Fluent. Вот фрагмент для этого:
R
eturn Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2008.ShowSql().ConnectionString(x =>
{
x.TrustedConnection();
x.Server(@"ANDRE-PC\SQLEXPRESS");
x.Database("FluentHibernateTest");
})
).Mappings(m => m.FluentMappings.AddFromAssemblyOf<Program>()).BuildSessionFactory();
после того, как я увидел SQL, стало ясно, что NHibernate рассматривает 0s, как говорит Диего.
SQL выглядел так:
SELECT this_.Id as Id0_0_, this_.Name as Name0_0_, this_.Price as Price0_0_ FROM [Product] this_ WHERE (this_.Name = 'Potatoes' and this_.Price = 0);
Исправлено решение 2:
// solution 2 - Using Example
Product exampleProduct = new Product();
exampleProduct.Name = "Potatoes";
return Session.CreateCriteria<Product>().Add(Example.Create(exampleProduct).ExcludeZeroes()).List<Product>();