我在NHibernate持久化的类上有以下属性:
public virtual string Code
{
get { return Id.ToString("SP000"); }
}
但是我来这样做,这当然不起作用:
Session.Linq<MyType>().Where(x => x.Code.Contains(searchTerm));
那么,是否可以将Code存储在数据库中并让NHibernate管理
.ToString("SP000")
设置ID时设置ID?
编辑:我想我需要一个拦截器,但我不确定如何实现我需要的东西。任何帮助表示赞赏
由于
安德鲁
答案 0 :(得分:1)
让我重申一下这个问题,以确保我理解它:您有一个映射到Id属性的整数主键,但您想查询Code属性是一个只读字符串。如果您有包含代码“SP123”和“SP234”的记录,则查询将返回searchTerm“2”的两个记录。
尝试使用HQL(Hibernate查询语言)代替Linq进行此查询。您可以在HQL中使用SQL函数,因此您的查询将类似于:
"from Table t where 'SP' + CAST(Id AS varchar) LIKE '%" + searchTerm + "%'";
您需要重写它以使用参数,这样它就不会受到SQL注入攻击的攻击。</ p>
答案 1 :(得分:0)
将代码映射为hbm中的只读属性,然后您可以以您喜欢的任何方式搜索它!
作为改变id的副作用,您还应考虑为其添加唯一约束,并设置属性update = false属性。
亲切的问候