如何编写Nhibernate查询

Bhu*_*kla 3 c# sql linq nhibernate asp.net-mvc-4

我有两个类在数据库中映射.这些表之间具有主键和外键关系,字段为"DeptId".

Employee.cs

 public class Employee: Entity
    {
        public virtual Int32 Id { get; set; }
        public virtual string Name { get; set; }
        public virtual string Gender { get; set; }
        public virtual Int32 Age { get; set; }
        public virtual string Designation { get; set; }
        public virtual bool Enabled { get; set; }
        public virtual int CreatedById { get; set; }
        public virtual DateTime CreatedDate { get; set; }
        public virtual int? LastModifiedById { get; set; }
        public virtual DateTime? LastModifiedDate { get; set; }
        public virtual bool IsDeleted { get; set; }
        public virtual Department Department { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

Department.cs

public class Department
    {
        public virtual int DeptId { get; set; }
        public virtual string DeptName { get; set; }
        public virtual bool Enabled { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

由于我是NHibernate的新手,我无法使用QueryOver编写更复杂的Linq查询.我写了以下查询但是如何编写更多高级查询.请为我提供样本查询和参考.

var query = Session.QueryOver<Employee>().List(); 
Run Code Online (Sandbox Code Playgroud)

Rad*_*ler 12

NHibernate查询的文档非常好而且完整.您可以在这里找到基本知识:

这里记录了QueryOverAPI,它是完全类型的版本Criteria:

开始观察API文档.很快你会发现它是相当逻辑的(.Where()构建WHERE,.Select()调整SELECT ....).后来,如果有任何问题,SO充满了如何

从16.1调整到员工的示例:

var list = session
        .QueryOver<Employee>()
        .WhereRestrictionOn(c => c.Age).IsBetween(18).And(60)
        .Select(c => c.Name)
        .OrderBy(c => c.Name).Asc
        .List<string>();
Run Code Online (Sandbox Code Playgroud)

加入部门(16.4调整后的例子)

var query = session
        .QueryOver<Employee>()
        .JoinQueryOver(e => e.Department)
            .Where(k => k.DeptName == "Director");
Run Code Online (Sandbox Code Playgroud)