Вы могли использовать keydown
, keyup
и keypress
события также.
В вашем репозитории / dao / persistencemanager / любой класс:
public IEnumerable<T> FindAll(DetachedCriteria criteria)
{
return criteria.GetExecutableCriteria(Session).List<T>();
}
, а затем
public void Delete(DetachedCriteria criteria)
{
foreach (T entity in FindAll(criteria))
{
Delete(entity);
}
}
См. Сообщение Дэви Бриона Доступ к данным с помощью NHibernate .
Изменить ]:
Насколько мне известно, если вы хотите использовать критерии, вам нужно загрузить объекты и перебрать их, чтобы удалить их. В качестве альтернативы используйте HQL или передайте SQL в сеанс.
Проще говоря, до 2.1.2 вы не можете.
Однако, если вы можете преобразовать выражение LINQ в HQL (или ICriteria в HQL), вы можете использовать перегруженный метод ISession.Delete ()
, который использует переданную строку HQL.
Вы можете использовать критерии, чтобы выбрать идентификаторы ваших элементов, объединить их в строку и использовать HQL для их удаления?
Что-то вроде:
public void Delete(ICriteria criteria, string keyName, string tableName)
{
criteria.setProjection(Projections.Attribute(keyName));
IList<int> itemIds = criteria.List<int>();
string collection = string.Join(",", Array.ConvertAll<int, string>(itemIds, Convert.ToString));
Session.HQL(string.Format("delete from {0} where {1} in ({2})", tableName, keyName, collection);
}
Этот код не был протестирован или скомпилирован (в частности, я не уверен в разделе HQL), но я думаю, что вы уловили идею: благодаря проекции мы извлекаем не все объекты целиком, а только индексы.