c# – NHibernate如何查询IList属性?
发布时间:2020-12-15 06:25:32 所属栏目:百科 来源:网络整理
导读:我试图查询一个IList string属性我的一个域类使用NHibernate.以下是一个简单的示例: public class Demo{ public Demo() { this.Tags = new Liststring(); } public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual
我试图查询一个IList< string>属性我的一个域类使用NHibernate.以下是一个简单的示例:
public class Demo { public Demo() { this.Tags = new List<string>(); } public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual IList<string> Tags { get; set; } } 像这样映射: <class name="Demo"> <id name="Id" /> <property name="Name" /> <bag name="Tags"> <key column="DemoId"/> <element column="Tag" type="String" /> </bag> 我可以保存和检索很好.现在查询我的域类的实例,其中标签属性包含一个指定的值: var demos = this.session.CreateCriteria<Demo>() .CreateAlias("Tags","t") .Add(Restrictions.Eq("t","a")) .List<Demo>(); 导致错误:集合不是关联:Demo.Tags var demos = (from d in this.session.Linq<Demo>() where d.Tags.Contains("a") select d).ToList(); 导致错误:对象引用未设置为对象的实例. var demos = this.session.CreateQuery("from Demo d where :t in elements(d.Tags)") .SetParameter("t","a") .List<Demo>(); 工作正常,但作为我真正的域类有许多属性,我正在构建一个复杂的动态查询,做丑陋的字符串操作不是我的第一选择.我更喜欢使用ICriteria或Linq.我有一个用户界面,可以输入许多不同的可能的搜索条件.现在建立ICriteria的代码是数十行.我真的很讨厌把它变成HQL字符串操纵. 解决方法
所以因为Criteria API的限制,我决定弯曲我的域类适合.
我为标签创建了一个实体类.我甚至不能创建它作为一个价值对象.它必须有自己的id. 我现在感到肮脏但是,不用诉诸字符串操作就可以构建一个动态查询对我而言比对域更重要. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |