如何執行刪除查詢使用NHibernate的除主鍵以外的實體類中的任何字段名?NHibernate的 - 刪除除主鍵以外的字段名稱
我這樣做:
public static void Delete<TEntity>(this ISession nhSession, string fieldName, object fieldValue) where TEntity : class
{//Delete by field name
TEntity instance = (TEntity)Activator.CreateInstance(typeof(TEntity), new object[] { });
nhSession.CreateQuery(string.Format("DELETE FROM {0} WHERE " + fieldName + " = (:fieldValue)", instance))
.SetParameter("fieldValue", fieldValue)
.ExecuteUpdate();
}
我可以調用這個如下:
nhSession.Delete<MyEntity>("MyFieldName", "ValueOfFieldToDelete");
這工作,但我需要作爲串場的傳遞名。爲此,調用者必須知道我想避免的數據庫腳本。
我想打個電話類似如下:
nhSession.Delete<MyEntity>(myEntityInstance.MyFieldName, "ValueOfFieldToDelete");
OR
nhSession.Delete<MyEntity>(x => x.MyFieldName, "ValueOfFieldToDelete");
這樣,來電者不需要輸入硬編碼字符串。
注意:我的實體字段名稱與基礎數據庫字段名稱不同。
這可能嗎?如果是,如何?
你的房產名稱和房屋名稱是否匹配? –
這篇文章演示瞭如何獲取列名以及屬性名稱。 http://stackoverflow.com/questions/1800930/getting-class-field-names-and-table-column-names-from-nhibernate-metadata –
我不知道它的問題。我將'CreateQuery()'方法與'CreateSqlQuery()'混淆了,我想知道查詢如何處理與屬性名稱不匹配的列名稱。由於'CreateQuery()'是HQL,這不是問題。 –