[Type: Int32 (0)] 1, Beverages second get category 1 1, Beverages 从输出可以看到, 只有第一次调用 Get 方法加载实体类时, 有 sql...输出, 从数据库取出了数据, 第二次加载则没有 sql 数据, 也就是利用了 session 的一级缓存。...[Categories] category0_ 4、 测试 QueryOver 查询: [Test] public void TestQueryOver() { using (var session...查询二级缓存配置 Cacheable 为一个查询显示启用二级缓存; CacheMode 缓存模式, 有如下可选: Ignore:更新数据时将二级缓存失效,其它时间不和二级缓存交互 Put:向二级缓存写数据..., 如果两个查询相同, 但是指定的 CacheRegion 不同, 则也会从数据库查询数据。
在NHibernate中经常会遇到通过父类的Repository来查询子类的情况,比如现在有一个抽象的Employee对象,下面有OfficeUser和Teacher两个具体的对象,这两个对象都有其特有的属性...我们可以将OfficeUser和Teacher都保存到Employee表中,然后建立了一个EmployeeRepository,使用Employee作为Query的入口,那么如果要查询Employee表中所有的...下面分别用QueryOver、Criteria和HQL来说明: QueryOver查询Employee表中的所有Teacher: Session.QueryOver().Where(...必须这么写,不能写成大写的Class,也不能换成其他字,只有这样才能让NHibernate理解,并正确返回结果。...以上是以最简单了例子说明了如果通过父类查询具体的子类的方法,实际项目中肯定比这个查询要复杂,但是只要记住了这三种查询的要点,结合其他条件就可以写出NHibernate能够理解的查询。
http://www.odata.org/ OData的特点就是可以根据传入参数动态生成Entity Framework的查询,最终实现动态的SQL的查询。...在OData API查询时,用户前端是url跟参数,但是在服务器端,我们是接收到的是一个ODataQueryOptions对象,其实我们需要做的就是把这个对象进行解析,生成NHibernate能够理解的查询形式...0; return queryString; } ODataQueryOptions转换为HQL的项目在这里: http://aspnet.codeplex.com/.../NHibernateFilterBinder.cs Filter和OrderBy属性都会被转换成HQL,然后我们就需要进行NHibernate的查询了。...其实系统给我们提供了一个专门分页返回的对象System.Web.Http.OData.PageResult,我们可以将Service返回的QueryResult封装成PageResult再返回即可
使用左匹配的好处是可以使用到SQL Server中对该字段建立的索引,使得查询效率很高,但是不好的SQL语句仍然会导致索引无法使用。...假设我们现在有个表YCMRSALE,其中有个字段MATNR存储了料号信息,如果我们要从这个表中查询出以AB开头的料号,如果使用NHibernate,那么我们常用的写法有: //QueryOver的写法...但是如果用NHibernate就要麻烦点了,我们必须要判断用户输入的字符串里面是否有特殊转移符,如果有,那么就需要进行替换,而且C#查询语句也有所不同。...Where条件: WHERE this_.Matnr like @p0 escape '~';@p0 = '~%00%' 以上说的都是在ORMapping的工具中进行左匹配查询,如果我们要在SQL语句中直接进行查询还有一种写法就是用...如果我们要改写成like的形式,那么就需要对matnr表中的matnr列进行处理,将特殊字符进行替换,将~%_[]这几个字符都替换掉。
包来实现一个很简单的对数据增删改查的操作,这一次需要用到我们之前下载的Nhibernate包里面的文件,全部dll文件引入之后,“引用”下面应该是这样的: ?....Database("apengchao").Username("root").Password("pc123"))) //使用Mappings将Modle...(var transcation = session.BeginTransaction()) { //使用session查询...APengChao 还记得这个类的功能吧 var userList= session.QueryOver();...return userList.List();//返回查询后的结果 } } }
简单的说就是把数据库的关系型数据类型转换为用对象型程序控制的框架类型。...以下为10万条数据的查询排行,单位为毫秒(ms)。...缺点:配置文件比较多,t-sql在每个配置文件里面写,条件查询比较麻烦。 SubSonic 优点:删除和查询效果很好,添加比较慢。 缺点:语法比较接近Linq,语法自成一派比较不满意。...NHibernate 优点:覆盖功能比较全,稳定性好,集成性能好,使用比较广泛,支持t-sql和hql语法。 缺点:配置比较多,比较麻烦,效率比较慢。 NBear 优点:配置最简单。...缺点:操作语法不成熟,不支持t-sql,使用起来不方便,已经很久没有更新了。 ps:大家根据测试的结果自行选择合适的框架。
通常情况下,查询需要结合实际业务来进行开发,当然为了通用,我在这里选择给调用方开放一个查询对象: public IQueryable IqQueryable() { return Session.Query...(); } 其中 IQueryable是一个接口,表示这是一个可查询对象,通过Linq可以快捷的查询。...SQL Server 2000 NHibernate.Dialect.MsSql2000Dialect Microsoft SQL Server 2005 NHibernate.Dialect.MsSql2005Dialect...Microsoft SQL Server 2008 NHibernate.Dialect.MsSql2008Dialect Microsoft SQL Azure Server 2008 NHibernate.Dialect.MsSqlAzure2008Dialect...Sybase SQL Anywhere 12 NHibernate.Dialect.SybaseSQLAnywhere12Dialect
为了保险起见,我们上网查询一下。 查询结果: 查询结果是,他们俩是【文件智能提示功能】用的。...然后将复制的文件,黏贴到测试的控制台程序下,然后改名为《hibernate.cfg.xml》。...NherbinateHelper"/> 因为我连接的是sqlserver2012,所以配置文件里,我将原始版...SQL2008的property 修改为 NHibernate.Dialect.MsSql2012Dialect 注意 其中<mapping...我推断,Nherbinate是读这个配置文件,然后到这个程序集里,反射查询那些poco对象。 最后,nhibernate-configuration-2.2这句话我想了很久要不要改成4.0。
DLINQ *.dbml文件该属于哪一层,的确Linq to Sql存在问题,DLINQ中,虽然可以在语言层级定义查询逻辑。...但是依然没有将数据库持久化数据映射为领域对象,所以还是一种针对数据库的编程模型。 LINQ是微软将在C# 3.0中将推出的语言集成查询技术,许多人也将LINQ叫做微软的ORM。...但是依然没有将数据库持久化数据映射为领域对象,所以还是一种针对数据库的编程模型。而Nhibernate则可以直接将关系数据映射为领域模型,这是DLINQ的主要问题。...Nhibernate已经提供了许多帮助进行领域面向对象建模的特征。而DLINQ目前还无法拥有。 而LINQ + NHibernate的好处则是: 类型安全的查询,并且能使用智能提示功能!...从原理上来说,DLINQ是将Lambda查询表达式解析为SQL语句:DLINQ => SQL,而NHLINQ则是将Lambda查询表达式解析为HQL语句:NHLINQ => HQL。
NHibernate用于把你的.Net对象持久化到底层的关系数据库中.你完全不用自己编写Sql语句去操作这些对象,NH会代替你做.你的代码里面只需要关心这些对象,NH生成sql语句并能为你取到正确的东西...步骤1:创建数据库表 我们正在做的是一个非常简单的NH示例.在这个例子里面,我们实现一个基本的用户管理子系统.我们将会使用一个user表(sql server 2000): use NHibernate...varchar(40) default NULL, LastLogon datetime default NULL, PRIMARY KEY (LogonID) ) go 我使用的是MS Sql...怎样生成Primary Key(NH很方便的就能给你生成一个,不管是什么类型的,只要你告诉它怎样去做).在我们举的例子中,把它设置成"assigned",意思是"我们的对象将自己生成key"(User对象将总是需要一个...载入,保存和查询你的对象. 5. Flush()你的Session 好,让我们来看看一些代码: 创建一个Configuration对象....
在后续使用中,通过映射关系生成SQL语句(这一步跟EF是一致的),进而操作数据或者查询数据。 2. 初探 NHibernate 2.1 准备 先来个控制台项目,我起名为dataprovider。...因为没有为SQL Server安装数据访问驱动: System.Data.SqlClient 将数据访问驱动安装成功后,运行可以获得sessionFactory。... ...Princess", Sex = 'F', Weight = 7.4f }; session.Save(princess); session.Flush();//推送修改给数据库,不调用的话数据库里将没有数据...查询并修改: var cats = session.Query().ToList(); var cat = cats.First(); cat.Name = "xiao li"; session.Update
提供了一个通过主键检索对象和导航链接查询对象时的一级缓存。也就是EF Core中的导航属性。...dialect 数据库方言,表示NHibernate连接的数据库是什么,该用哪种格式解析关系映射到数据库SQL语句 default_schema 默认的schema,用来设置连接字符串连接的数据库默认的...max_fetch_depth 最大递归深度,表示一次查询中直接加载的导航属性深度。默认是不直接加载导航属性,基于延迟加载的逻辑,由实际使用时才从数据库中加载数据。...show_sql 是否在控制台中打印转换的SQL语句,一般在调试的过程中会设置为true,用来确认生成的SQL是否正确等。...其中create表示每次只创建新增的;create-drop表示每次ISessionFactory创建时创建表 ,ISessionFactory关闭时,删除表;其中update表示每次都会将DDL SQL
对象关系映射(O/R Mapping,Object Relational Mapping)表示一种技术,用来把对象模型表示的对象映射到基于SQL 的关系模型数据结构中去。...NHibernate不仅仅管理.NET 类到数据库表的映射(包括.NET 数据类型到SQL 数据类型的映射),还提供数据查询和获取数据的方法,大幅度减少我们开发时人工使用SQL和ADO.NET处理数据的时间...我使用的开发环境:Microsoft Visual Studio 2012、SQL Server 2008 、NHibernate。 1、创建项目 (1) 我们新建如下一个项目 ?...Hello123 25 <property name="show_<em>sql</em>...<em>查询</em>语言(HQL)。
Mapping 今天我们将说一下ORM中的R映射,我们现在的数据库大多都是关系型数据库了,所以可以说关系在我们数据库设计中也是非常重要的部分,NHibernate也非常重视这一块,但在传统方式中,配置就比较麻烦...我们的一对一简单映射也说完了,同时也完成了Component的映射,接下来说说延迟加载 一对一延迟加载 细心的朋友一定会发现我们的output出来的Sql语句,使用的是联合查询,但有时对我们来说,只需要...User就可以了,我不需要查询UserDetail,或许你会说,使用以下方式来进行延迟加载: HasOne(u => u.Detail).Cascade.All().LazyLoad...Cascade.All().Fetch.Select(); HasOne(d => d.User).Cascade.All().Constrained(); 进行延迟加载,但结果只是分了2条Sql...语句进行的查询,并不是延迟加载,这一点可以通过Sql Server Profiler查看: ?
对象/关系数据库映射(object/relational mapping (ORM))这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。...NHibernate除了能将一张表映射为一个对象,还可以将表间关系变为对象的属性。例如学生和课程间的多对多关系就可以转化为学生类中的一个课程集合的属性。...由此可见,NHibernate不仅仅管理.Net类到数据库表的映射,还提供数据查询和获取数据的方法。因此采用NHibernate,可以大幅度减少开发时人工使用SQL处理数据的时间。...> (2)然后将NHibernate唯一的一个dll(NHibernate.dll)添加到工程的引用中,步骤如下: à à 2....可以用Sql语句来创建,也可以用其他方式创建。
4、 将 xml 文件编译为嵌入的资源, 打开项目文件 WebApiTest.csproj , 添加一个 ItemGroup 节点: true trueAlways 6、 修改 Startup.cs 文件, 将..., ILoggerFactory factory ) { Configuration = configuration; // 将内置的日志组件设置为 NHibernate 的日志组件...进行查询: // GET api/values [HttpGet] public ActionResult> Get() { using (var
NHibernate用于把你的.Net对象持久化到底层的关系数据库中.你完全不用自己编写Sql语句去操作这些对象,NH会代替你做.你的代码里面只需要关心这些对象,NH生成sql语句并能为你取到正确的东西...步骤1:创建数据库表 我们正在做的是一个非常简单的NH示例.在这个例子里面,我们实现一个基本的用户管理子系统.我们将会使用一个user表(sql server 2000): use NHibernate...varchar(40) default NULL, LastLogon datetime default NULL, PRIMARY KEY (LogonID) ) go 我使用的是MS Sql...怎样生成Primary Key(NH很方便的就能给你生成一个,不管是什么类型的,只要你告诉它怎样去做).在我们举的例子中,把它设置成”assigned”,意思是”我们的对象将自己生成key”(User对象将总是需要一个...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
NHibernate是一个面向.NET环境的对象/关系数据库映射框架,主要应用在数据持久层,和其它的ORM框架一样用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。...:http://sourceforge.net/projects/nhibernate/files/,如果嫌麻烦,可以下载本文示例,中间包含了NHibernate。...2、新建项目并添加引用,将NHibernate-3.3.0.GA-bin中的“Iesi.Collections.dll”与“NHibernate”引用到项目中,如图2所示复制Configuration_Templates...该文件将POPO类型与数据表进行映射。User.hbm.xml内容如下所示。 <?xml version="1.0" encoding="utf-8" ?.../事务开始 ITransaction transaction = session.BeginTransaction(); //执行HQL查询
NHibernate 使用 SqlQuery 多数情况下, NHibernate 提供的 HQL、 Linq 以及条件查询足够用了, 但是在某些情况下, 需要使用 SqlQuery, 使用 SqlQuery...可以查询标量(简单类型), 查询单表实体类, 关联表查询。...categories {c}") .AddEntity("c", typeof(Category)); var result = sqlQuery.List(); 关联表查询...var db = this.ObjectContainer.Resolve(); var sql = "select {p.*}, {c.*} from products...{p} join categories {c} on p.CategoryID = c.CategoryID"; var sqlQuery = db.Session.CreateSQLQuery(sql
领取专属 10元无门槛券
手把手带您无忧上云