如何执行删除查询使用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,这不是问题。 –