У меня есть вопрос о методе Критериев, one-many отношение к базе данных, 'каждый' - "учетная запись", 'многие' - "сайты", когда я использую CreateCriteria()
что-то не правильно.
Как это: SessionFactory.OpenSession().CreateCriteria(typeof(Account)).List().Count();
Прежде чем это будет выполнено, я думаю, что SQL должен быть SELECT COUNT(*) FROM table
, но SQL SELECT id, siteurl...FROM table
. Так что случилось с этим? Как я могу решить его?
И First()
метод должен быть SELECT TOP1 ...FROM table
, но это SELECT ...FROM table
Я - новобранец Nhiberate, помогите мне.
Это происходит потому, что метод Count
, который вы вызываете в конце, выполняется после выполнения запроса и вне базы данных. Вы подсчитываете только элементы списка в памяти. Чтобы добиться желаемого, можно использовать проекцию:
var count = session
.CreateCriteria<Account>()
.SetProjection(
Projections.Count(Projections.Id())
)
.UniqueResult<long>();