时间绕过这个问题(link),因为它似乎在没有实际答案的情况下产生大量流量。问题在5年前被问到,而NHibernate在那段时间从2.1版升级到4.0版(截至8月17日)。我现在也遇到了这个问题,所以就这样了。
目前,我在一个简单案例的项目中解决它的方法是通过这种扩展方法:
public static void DeleteByKey<TEntity, TKey>(this ISession session, TKey key)
where TEntity : class
{
var metadata = session.SessionFactory.GetClassMetadata(typeof (TEntity));
var hql = String.Format("delete {0} where id = :id", metadata.EntityName);
var results = session.CreateQuery(hql).SetParameter("id", key).ExecuteUpdate();
if (results != 1)
throw new EntityNotFoundException();
}
然而,这是弱类型的,只适用于键,而不是一般的LINQ表达式谓词。