lom*_*axx 8 c# nhibernate nhibernate-mapping
我有一个使用NHibernate映射到表的类.问题是只有部分属性映射到表中的列.这很好,因为我们用于显示的唯一列是映射的,但我想知道是否有任何方法可以查询表中未映射到我的类中的属性的其他列.
例如,我们有一个包含以下列的表:
Customer
-----------
CustomerId
Name
DateCreated
Run Code Online (Sandbox Code Playgroud)
我们有一个对象
public class Customer
{
public virtual int CustomerId {get;set;}
public virtual string name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
并name与customerId被映射但DateCreated不是因为我们从来没有在任何地方显示出来.我们想查询Customer表格,了解特定日期创建的客户.如果没有映射,有没有办法做到这一点DateCreated?此外,最好使用标准API执行此操作.
是不是使用普通的SQL查询?我现在无法测试它,但我想你可以查询未映射的字段,只要你的查询返回Hibernate可以映射到对象的东西.(对不起,如果已经排除了这个选项)
编辑:这似乎工作:
ISQLQuery query = session.CreateSQLQuery(
"select c.* " +
"from Customer c " +
"where c.CreateDate > :CreateDate");
query.SetDateTime("CreateDate", new DateTime(2009, 3, 14));
query.AddEntity(typeof(Customer));
IList<Customer> results = query.List<Customer>();
Run Code Online (Sandbox Code Playgroud)
使用HQL/Criteria查询,NHibernate只能处理已映射的内容(尽管原始SQL仍然是Andy White指出的选项).如果要使用Criteria查询,则必须映射列.
但是,NHibernate不仅限于使用可公开访问的成员.所以,如果你想继续隐藏CreateDate字段,请声明一个私有(也许是只读?)属性.或者,您可以跳过该属性并通过设置access="field"映射中的property元素来指示NHibernate使用字段级访问.
我知道你想在没有映射字段的情况下这样做,但我认为这是不可能的(不修改NHibernate源代码;).尽管如此,如果您要查询该字段,那么该字段与您的域有一些相关性,因此可能值得映射到它,并且对于私有或受保护的成员,您可以保持信息隐藏到位.
| 归档时间: |
|
| 查看次数: |
7149 次 |
| 最近记录: |