Увы, «без помех» нуждается в некоторой помощи программиста. Для определения степени «транзакции» необходимы BEGIN
и COMMIT
. И ...
Ваш пример неадекватен. Для первого утверждения требуется SELECT ... FOR UPDATE
. Это говорит о том, что обработка транзакций будет иметь место UPDATE
для строк (строк), которые извлекает SELECT
. Это предупреждение имеет решающее значение для «предотвращения помех». Теперь график времени читает:
FOR UPDATE
) (Примечание: это не «тупик», просто «ожидание».)
var session = GetSession();
var criteria = session.CreateCriteria(typeof(Order))
.Add(Restrictions.Eq("Product", product))
.SetProjection(Projections.CountDistinct("Price"));
return (int) criteria.UniqueResult();
Решенный Мой собственный вопрос путем изменения ответа Geir-Tore.....
IList results = session.CreateMultiQuery()
.Add(session.CreateQuery("from Orders o").SetFirstResult(pageindex).SetMaxResults(pagesize))
.Add(session.CreateQuery("select count(distinct e.Id) from Orders o where..."))
.List();
return results;
Вот проект того, как я делаю это:
Запрос:
public IList GetOrders(int pageindex, int pagesize)
{
IList results = session.CreateMultiQuery()
.Add(session.CreateQuery("from Orders o").SetFirstResult(pageindex).SetMaxResults(pagesize))
.Add(session.CreateQuery("select count(*) from Orders o"))
.List();
return results;
}
ObjectDataSource:
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable GetOrders(int startRowIndex, int maximumRows)
{
IList result = dao.GetOrders(startRowIndex, maximumRows);
_count = Convert.ToInt32(((IList)result[1])[0]);
return DataTableFromIList((IList)result[0]); //Basically creates a DataTable from the IList of Orders
}
Вам нужен e. Идентификатор, e. Имя?
просто сделайте
выберите количество (*) из Объекта где.....
Я предпочитаю,
public IList GetOrders(int pageindex, int pagesize, out int total)
{
var results = session.CreateQuery().Add(session.CreateQuery("from Orders o").SetFirstResult(pageindex).SetMaxResults(pagesize));
var wCriteriaCount = (ICriteria)results.Clone());
wCriteriaCount.SetProjection(Projections.RowCount());
total = Convert.ToInt32(wCriteriaCount.UniqueResult());
return results.List();
}