有谁知道如何将LINQ Expression转换为NHibernate HQL语句?第2版

时间:2014-09-25 11:28:07

标签: c# linq nhibernate fluent-nhibernate hql

时间绕过这个问题(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表达式谓词。

1 个答案:

答案 0 :(得分:2)

不容易做,我害怕。在NHibernate中有一个开放的请求(我自己):Strongly Typed Deletes。我相信现在你的解决方案是最好的。