NHibernate框架中实体对应数据库中的记录的操作:
static ISessionFactory factory;
static ILog logger;
ISession session;
Configuration config = new Configuration();
Config.Configure();
factory = config.BuildSessionFactory();
session = factory.OpenSession();
1、获取记录
User user = (User)session.Get(typeof(User), 1);//数字1为对应数据库中记录的主键值ID,User为实体类的名称
或者
User user = session.Get<User>(1); //强类型方法,1为对应记录的ID
2、保存记录
session.Save(user);
3、更新记录
session.Update(user); 或者
session.Save(user);//也可以更新记录时用Save()方法
4、删除记录
session.Delete(user);
5、其它获取记录方法
User user=(User)session.Load(typeof(user),1);
或者:
User user = session.Load<User>(5);//强类型方法
这两个方法是假定所指定的实体类是存在的,即假定数据库存在这样的记录,否则会抛出不存在异常,而Get的两个方法不存在时返回null!
6、HQL(NHibernate Query Language)
//IQuery query = session.CreateQuery("from User");//User为映射数据中的表名的实体,数据库中表名为Users,项目中自成的对应实体名为User
//或者 如:(只查询部分字段)
//IQuery query = session.CreateQuery("select u.Id,u.FirstName From User as u join u.Role as r where r.Id = 1 ");
或者 如:(查询整个实体数据)
IQuery query = session.CreateQuery("select u From User as u join u.Role as r where r.Id = 1 ");
//通过连接选中实体u中的所有的属性 join 会自动 匹配 u.RoleId = r. RoleId
IList<User> list = query.List<User>();//执行HQL,下面显示数据
Console.WriteLine(list[0].FirstName);
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i].Id);
}
User user1 = list[0];
Console.WriteLine(user1.FirstName);
在HQL中,我们可以应用where条件查询( =,>,< between ,in like, and ,or, is等)
在选择部分字段时:字段大小写应该尽量跟属性名称保持一致,尤其是在使用别名的情况下,
如:select u.FirstName
在使用HQL时,同样可以利用聚合函数,如 select avg(u.Age),sum(u.Age)
可以对记录进行排序 如:order by u.Id
可以对记录进行分组 如:group by r.Id