华丽的NHibernate
http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919886.html
华丽的NHibernate
摘要: 在NHibernate中,ISessionFactory是线程安全的,对应一个数据库。它是生成ISession的工厂。而ISession是线程不安全的。 创建一个ISessionFactory需要消耗比较多的资源。因此,我们只在程序初始化的时候创建一次,以后就一直使用这个ISessionFactory。 而ISession的创建只消耗很少的资源。因此我们可以随意创建。一、原始单例模式封装的ISessionFactory 因此,对于ISessionFactory,我们使用饿汉单例模式实现它。 原始饿汉单例模式封装ISessionFactory实例: //密封类 ...
阅读全文
摘要: 首先,当然是安装MemCache服务器端了。 然后配置过程,仅仅两个问题。 1、NHibernate要与NHibernate.Cache的版本要一致。否则,NHibernate.Caches.MemCache.MemCacheProvider无法实例化。 2、要引用log4net,否则Memcached.ClientLibrary.SockIOPool无法实例化。 App.config: NHibernate.Dialect.MsSql2008Dialect NHibernate.Connection....
阅读全文
摘要: 在NHibernate的映射中,关于继承的映射策略有3种方式单表继承类表继承具体表继承 另外还有一种比较特别的多态映射隐式多态 下面分别来阐述NHibernate继承映射的各种策略要点。一、单表继承 单表继承的方式是,所有的字段都放在一个表中,用一个字段来区分子类。使用配置节点配置子类。 看DEMO,首先新建一张Animal表如下: 映射文件:Animal.hbm.xml: //discriminator-value用来标记表中哪些行是青蛙 映射文件:Fish.hbm.xml ...
阅读全文
摘要: NHibernate过滤器相当于定义一个非常类似于类和集合上使用的where子句。ISession 中默认是不启用过滤器的,必须通过ISession.EnableFilter()方法显式的启用。 该方法返回被启用的IFilter的实例。这也支持链式操作。 过滤器主要的配置都在映射文件内完成。来看示例: 操作: static void Main(string[] args) { ISessionFactory _sessionFactory =...
阅读全文
摘要: NHibernate也是能够操作存储过程的,不过第一次配置可能会碰到很多错误。一、删除 首先,我们新建一个存储过程如下: CREATE PROC DeletePerson @Id int AS DELETE FROM Person WHERE PersonId = @Id; 修改映射文件,添加删除对象的存储过程: DeletePerson ? 执行存代码: using (ISession session = sessionFactory.Op...
阅读全文
摘要: 在NHibernate中,可以把视图当表一样操作,只需要记住一点就是,视图是只读的,因此映射实体的setter应该改为protected。 新建一个视图如下: 持久化类: public class CountryPersonModel { public virtual int PersonId { get; protected set; } public virtual string PersonName { get; protected set; } public virtual string CountryName { ge...
阅读全文
摘要: 在上一篇的Linq to NHibernate的介绍当中,全部是namespace NHibernate命名空间中的IQueryOver接口提供的。IQueryOver这个借口实际上会被翻译成条件查询(Criteria Queries)。 实际上Linq to NHibernate更加强大。我...
阅读全文
摘要: 数据操作,在这里主要介绍INSERT、UPDATE、DELETE。我们在使用NHibernate的时候,如果只是查询数据,不需要改变数据库的值,那么是不需要提交或者回滚到数据库的。一、INSERT 通过调用ISession.Save()方法,然后同步同步到数据库。 Program.cs ...
阅读全文
摘要: NHibernate的一级缓存,名词好像很牛B,很难。实际上就是ISession缓存。存储在ISession的运行周期内。而二级缓存则存储在ISessionFactory内。一、ISession一级缓存测试 ISession默认开启一级缓存,不需要任何配置。ISession缓存在ISession创建后就可以使用,以后每次通过此ISession操作数据时,ISession会检测自身是否缓存有相应的数据,如果有则直接返回。如果没有,这时才查询数据库返回,同时缓存到ISession。当释放ISession实例的时候,缓存自动销毁。 示例: 首先我们先开启配置文件中的show_sql节点: ...
阅读全文
摘要: 一、持久化类中成员标量的要求 作为被NHibernate使用的持久化类,必须满足以下几点要求: 1、声明读写属性 在NHibernate的使用中,持久化类的成员变量必须声明对应的属性,NHibernate支持public、internal、protected三种访问修饰符。 2、提供标识属性 持久化类必须提供一个标识属性,标识属性对应数据库的主键。 当然这个是可选的,并非强制性,但是强烈建议这么做。这个标识属性可以叫任何名字,任何类型。 3、属性必须是非密封的和虚的 持久化类中所有的属性,必须声明为非密封的,也就是不能带有sealed。而且必须带有virtual...
阅读全文
摘要: 使用NHibernate最重要的一步就是配置,如果连NHibernate都还没有跑的起来,谈何学习。今天就来详解一下NHibernate的配置。一、NHibernate基本配置 NHibernate配置要注意的有: 1、NHibernate需要一个自定义的配置节点,一般放在Web.confi...
阅读全文
摘要: 映射文件,用于告诉NHibernate数据库里的表、列于.Net程序中的类的关系。因此映射文件的配置非常重要。一、一对一 NHibernate一对一关系的配置方式使用配置节点。 当我们两个表拥有相同的主键字段,主键值相同的需要关联在一起。比较典型的一个例子是,一个对象的属性太多,常用的和不常...
阅读全文
摘要: 一、集合外键 在NHibernate中,典型的用于映射集合类的元素有,,,,,。 我们回到上一篇,集合映射基础当中的一对多查询。对于集合类型: public virtual ISet ListPerson { get; set; } NHibernate的配置文件与之对应的是: 那么、、、、、这些东西的用法以及它们之间的区别是什么呢? 1. ISet集合中的对象是唯一的,无序的,不能通过索引、key值访问。 在.Net中并没有与对应的类。因此当我们的配置文件是配置集合关系的时候,Model持久化类中ISet必须使用NHibernate的...
阅读全文
摘要: 刚学NHibernate的时候觉得,HQL挺好用的,但是终归没有与其他技术相关联,只有NHibernate用到,一来容易忘记,二来没有智能提示,排除错误什么的都不给力,直到看到一个同事用Linq to NHibernate,那代码是相当的清晰明了,其实什么条件查询,HQL什么的感觉只是一个NHi...
阅读全文
摘要: NHibernate完全靠配置文件获取其所需的一切信息,其中映射文件,是其获取数据库与C#程序关系的所有信息来源。一、简单映射 下面先来一个简单的例子,然后随着不断地对这个例子修修改改,从而真正了解映射文件。具体的资料可以查看http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919886.html 先来看一张表: 映射文件Product.hbm.xml: PersonModel.cs:namespace Model{ public class...
阅读全文
摘要: 一、组件简介 组件(Component)可以理解为被一个对象所包含的对象而持久化,而并非一个实体。简单说来,假如数据库有FirstName,LastName这两个字段,我们在C#中可以将这两个字段提取出来作为一个Name对象使用。 示例,首先建一张表,并添加数据如下: Person.hbm.xml Model:namespace Model{ public class PersonModel { public virtual int Id { get; set;...
阅读全文
摘要: 一、延迟加载 延迟加载可以理解为:当需要用的时候才加载。 假设我们数据库有一个Person对象,一个Country对象,其中Person属于Country,一对多关系。当我们Get()一个Person对象的时候。并不立即把Country对象也加入来,而是当我们的代码执行到要通过Person调用Country对象的时候,NHibernate才到数据库去查询对应的Country对象,这就叫延迟加载。相反,如果我们Get()一个Person对象,并且连与此Person对象相关联的Country对象也一起加载到程序中,这就叫立即加载。 延迟加载必须在Session的周期内,如果查询了数据,但是程...
阅读全文
摘要: 1.hibernate-mapping 这个元素包括以下可选的属性。schema属性,指明了这个映射所引用的表所在的schema名称。假若指定了这个属性, 表名会加上所指定的schema的名字扩展为全限定名。假若没有指定,表名就不会使用全限定名。default-cascade 指定了未明确注明cascade属性的.Net属性和集合类.Net会采取什么样的默认级联风格。 auto-import属性默认让我们在查询语言中可以使用非全限定名的类名。assembly和 namespace指定了持久化类的应用程序集名称和其所在的名称空间名。 各选项说明:(1)schema (...
阅读全文
摘要: 一、NHibernate配置所支持的属性属性名用途dialect设置NHibernate的Dialect类名 - 允许NHibernate针对特定的关系数据库生成优化的SQL可用值:full.classname.of.Dialect, assemblydefault_schema在生成的SQL中, 将给定的schema/tablespace附加于非全限定名的表名上.可用值:SCHEMA_NAMEuse_outer_join允许外连接抓取,已弃用,请使用max_fetch_depth。可用值:true|falsemax_fetch_depth为单向关联(一对一, 多对一)的外连接抓取(outer
阅读全文
摘要: 一、NHibernate二级缓存简介 NHibernate由ISessionFactory创建,可以被所有的ISession共享。 注意NHibernate查找缓存的顺序,在使用ISession操作数据时,NHibernate会先从一级缓存中查找需要的数据,如果一级缓存不存在需要的数据,则查找二级缓存,如果二级缓存存在所需数据,则直接使用缓存中的数据。如果二级缓存都没有,那么才执行SQL语句,从数据库中查找缓存。 NHibernate本身提供了一个基于Hashtable的HashtableCache缓存,不过功能有限且性能不高。不适合用于大型应用程序,不过我们可以使用第三方缓存提供程...
阅读全文
-
使用NHibernate(1)--资料汇总
NHibernate最新版本是4.0,目前还只是alpha版,没有发布.稳定版本是3.3,项目中用的也是这个版本,所以以后的介绍都是基于这个版本的. 在网上找了一下相关的学习资料,现汇总如下: NHi ...
-
Nhibernate的Session管理
参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html 但这个方法还不能解决Session缓存问题,由于创建Session需 ...
-
";NHibernate.Exceptions.GenericADOException: could not load an entity"; 解决方案
今天,测试一个项目的时候,抛出了这个莫名其妙的异常,然后就开始了一天的调试之旅... 花了很长时间,没有从代码找出任何问题... 那么到底哪里出问题呢? 根据下面那段长长的错误日志: -- ::, ...
-
nhibernate连接11g数据库
我框架的数据映射用 nhibernate连接多数据库,这次又增加了oracle11g,负责开发的同事始终连接不上,悲催的sharepoint调试是在不方便... 下面描述下问题的解决,细节问题有3个: ...
-
全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)
在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...
-
跟我学习NHibernate (1)
引言:Nibernate概述 NHibernate是一个ORM框架,NHibernate是一个把C#对象世界和关系世界数据库之间联系起来的一座桥梁.NHibernate 能自动映射实体模型到数据库,所 ...
-
让OData和NHibernate结合进行动态查询
OData是一个非常灵活的RESTful API,如果要做出强大的查询API,那么OData就强烈推荐了.http://www.odata.org/ OData的特点就是可以根据传入参数动态生成Ent ...
-
MVC Nhibernate 示例
首先,非常感谢提出问题的朋友们,使得本人又去深入研究了NHibernate的<Session-Per-Request 模式>. 前言: 谈到NHibernate大伙并不陌生,搞Java ...
-
Nhibernate mapping 文件编写
生成工具软件 现在生成工具软件有很多了,例如商业软件:NMG.CodeSmith.Visual NHibernate,开源软件:MyGeneration.NHibernate Modeller.AjG ...
随机推荐
-
浏览器渲染引擎,提高css渲染速度。
一.渲染引擎渲染引擎的职责是……渲染,也就是把请求的内容显示到浏览器屏幕上.默认情况下渲染引擎可以显示HTML,XML文档以及图片. 通过插件(浏览器扩展)它可以显示其它类型文档. 二.各种渲染引擎我 ...
-
使用ANTS Performance Profiler&;ANTS Memory Profiler工具分析IIS进程内存和CPU占用过高问题
一.前言 最近一段时间,网站经常出现两个问题: 1.内存占用率一点点增高,直到将服务器内存占满. 2.访问某个页面时,页面响应过慢,CPU居高不下. 初步判断内存一点点增多可能是因为有未释放的资源一直 ...
-
Sublime插件支持Sass编译和Babel解析ES6 &; .sublime-build文件初探
用Sublime Text蛮久了,配置配来配去的,每次换电脑都得重头再配过,奈何人老了脑子不中用了,得好好整理一些,下次换电脑就有得参考了.. 同事说,他的WebStorm简直太方便,自身集成了很多方 ...
-
Npoi实现Excel绘制功能
使用Npoi操作Excel,是我一直很喜欢的一种方式. 说简单也简单,但是封装好重用性,易用性,也稍稍费了些时间.在这里做个记录,免得以后遗忘. 首先说一下需求,需求有两点 1.新建Excel,并下载 ...
-
Dropping water balloons
题意: 给你k个水球n层楼(n很大) 现在做实验在楼上向下丢水球,若水球没破可以重新丢,求把所有水球弄破的最小试验次数. 分析: 开始完全没思路啊.从正面求没法做不会表示状态,做实验是只能从第一层,一 ...
-
12C CLONE PDB and config service_listener
Clone PDB PtestDEV to Ptestuat in testuat 1) Clone PtestDEV to Ptestuat C:\Windows\system32> ...
-
LPC2478时钟模块详解
时钟框图如上图,系统时钟来源分别是内部4M的RC振荡器和外置晶振,RTC模块在某些情况下也可以作为主时钟,经过系统时钟选择s\de时钟需要经过PLL倍频(或者不倍频),处理过的PLL输出USB时钟分频 ...
-
[leetcode-543-Diameter of Binary Tree]
Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a b ...
-
个人总结ASP.NET必备面试题
1.你能解释下MVC的完整流程吗? 所有的终端用户请求被发送到控制器.控制器依赖请求去选择加载哪个模型,并把模型附加到对应的视图.附加了模型数据的最终视图做为响应发送给终端用户. 2. 那你说一下你对 ...
-
AC自动机相关Fail树和Trie图相关基础知识
装载自55242字符串AC自动机专栏 fail树 定义 把所有fail指针逆向,这样就得到了一棵树 (因为每个节点的出度都为1,所以逆向后每个节点入度为1,所以得到的是一棵树) 还账- 有了这个东西, ...