article/details/53198870 首先,C#中通过映射对MySQL数据进行操作需要导入:FluentNHibernate.dll和NHibernate.dll...选择联机搜索,然后点击安装就可以了; 右键添加新项目,添加一个NhibernateHelper类用来打开MySQL会话,代码如下; class NhibernateHelper {...: TestUserManager class TestUserManager { public IList GetAllUser() //获得用户表中的所有数据...(); } } } public void SaveUser(TestUser user) //添加user并保存到数据库...时textuser对象; { Id(x => x.Id).Column("Id");//设置Id属性为主键,column为匹配数据库字段
,MySQL-FRONT ,Connector/Net(选择.Net&Mono) Nhibernate包可以在VS2015中下载 ,对MySql操作,我用的是MySQL-FRONT,注意要想实现和数据库的链接...先写一个简单的给你定义的数据库中添加一条元素的代码:(不使用Nhibernate的) 前提:先把该用的dll文件,添加到引用里面去不然,会连接不成功,之前下载的Connector/Net(选择.Net&...Nhibernate包来实现一个很简单的对数据增删改查的操作,这一次需要用到我们之前下载的Nhibernate包里面的文件,全部dll文件引入之后,“引用”下面应该是这样的: ?...现在表中有两天信息了,现在我们使用代码对这两条信息进行操作,步骤如下: 1.打开VS2015新建一个项目,名字为APengChao,与数据库名字对应的话,看着也舒服一些,当然名字随意,想取什么就取什么,...var userList= session.QueryOver(); return userList.List
); } } 对应的输出代码为: Before Load Category After Load Category NHibernate: SELECT category0_..._sessionFactory.OpenSession()) { session.Get(1); } } 对应的输出为: NHibernate: SELECT...(); } } 对应的输出为: NHibernate: select category0_....(CacheMode.Normal) .CacheRegion("AllCategories"); query.List(); } } 对应的输出为: NHibernate: SELECT...include:可选,默认值为all,当取non-lazy时设置延迟加载的持久化实例的属性不被缓存。 usage:声明缓存同步策略,就是上面说明的四种缓存策略。
但是在项目有时我们并没有采用Entity Framework,而是采用的NHibernate,那么该怎么用OData呢? 经过一段时间的Google和研究,终于找到了一个好的方案。...在OData API查询时,用户前端是url跟参数,但是在服务器端,我们是接收到的是一个ODataQueryOptions对象,其实我们需要做的就是把这个对象进行解析,生成NHibernate能够理解的查询形式.../NHibernateFilterBinder.cs Filter和OrderBy属性都会被转换成HQL,然后我们就需要进行NHibernate的查询了。...Convert.ToInt32( ((IList) queryResults[1])[0]) : ((IList) queryResults[0]).Count; ..., IList list) { this.TotalCount = count; this.ResultSet = list;
我们可以在该文件上点击右键选择属性进行修改。 (2) NHibernateHelper.cs数据操作辅助类 我们现在可以开始NHibernate了。...首先,我们要从ISessionFactory中获取一个ISession(NHibernate的工作单元)。ISessionFactory可以创建并打开新的Session。...public virtual int Age { get; set; } public virtual string Sex { get; set; } } 注意:字段的属性一定要设置为...这正是NHibernate映射文件发挥作用的地方。映射文件包含了对象/关系映射所需的元数据。元数据包含持久化类的声明和属性到数据库的映射。...我们可以在People.hbm.xml点击右键选择属性修改该文件的生成操作 (5) NHData.cs对库表People进行增删改查 现在完事具备只欠东风了,开始我们的数据库CRUD操作,在看该文件的代码时
deptOuList = session.QueryOver().List(); deptOuList.Insert(0,...new t_data_DeptOU() { OUName="-1", DeptName="---请选择---" });... deptOuList = session.QueryOver().List(); deptOuList.Insert...--ViewData["other"]不存在/值为null时,选中value="SOHO"的项--> <!...style = "width:150px;height:23px" }) 下拉列表禁止选择且能获取到控件当前选择的值
NHibernate除了能将一张表映射为一个对象,还可以将表间关系变为对象的属性。例如学生和课程间的多对多关系就可以转化为学生类中的一个课程集合的属性。...二、NHibernate使用步骤 1.为系统引入NHibernate的库,并且配置NHibernate; 2.新建一个将要持久化.Net对象的表; 3.构建一个需要被持久化的.Net类; 4.构建一个可以让...NHibernate知道如何完成ORM映射的XML文件; 5.使用NHibernate的API来编程 三、NHibernate的使用 1....配置NHibernate (1)NHibernate的配置文件有两种:在桌面应用程序(WinForm)中为App.config,在网页应用程序(WebForm)中为web.config。...list = query.List(); if(list.Count>0){ Student obj=(Student)list[0]; //….. } vSession.Close(
, 两次加载同一个实体类, 该测试的输出为: First get category 1 NHibernate: SELECT category0_...._sessionFactory.OpenSession()) { session.Get(1); } } 对应的输出为: NHibernate: SELECT...(); } } 对应的输出为: NHibernate: select category0_....(); } } 对应的输出为: NHibernate: SELECT this_....include:可选,默认值为all,当取non-lazy时设置延迟加载的持久化实例的属性不被缓存。 usage:声明缓存同步策略,就是上面说明的四种缓存策略。
我们的底层开发平台是sprint.NET+NHibernate+MVC+WCF+EasyUI方式开发,顺便加点Spring.net注入的部分,当然我们最基本的关于权限设计、业务设计,而架构。...,主要是靠Nhibernate的定义通用的增删改从,然后其它类继承增删改查接口和对应的自己定义的子类的接口,实现拓展 首先,我们从曾经的写代码经验知道,我们的Dao主要是做增删改查等方面,我们就先定义一个公共方法的接口叫做...仅仅须要传入Name属性的名称和值就可以; //这个Name是相应的实体的属性名称,非数据库字段名。...; //这个Name是相应的实体的属性名称。...','da34ebae-11a7-4cfc-9772-b5e049768fe7','e5ee288e-8c5d-46bc-8c77-34b8c45750c1')"); IList
开始做一个简单的增删改查示例,如图1示例: 图1 1、创建数据库与表,这里假设使用NibernateDemo数据库,Users表包括(id,name,pwd)字段,id是主键自动增长,name与pwd...2、新建项目并添加引用,将NHibernate-3.3.0.GA-bin中的“Iesi.Collections.dll”与“NHibernate”引用到项目中,如图2所示复制Configuration_Templates...文件夹中的对应数据库配置文件,这里使用MSSQL,所以复制“MSSQL.cfg.xml”,并对NHibernate的配置信息适当修改 。...4、为POCO类编写写一个数据库映射文件,其实User.hbm.xml映射文件包含了对象/关系映射(ORM)所需的元数据。元数据包含持久化类的声明和属性到数据库的映射。...,该文件必须输出到Bin目录中,否则会报错“xxx is not mapped”,如图3所示具体方法是:选择User.hbm.xml文件->属性->生成操作,设置这个属性的值为“嵌入的资源” 图3 5
假设我们现在有个表YCMRSALE,其中有个字段MATNR存储了料号信息,如果我们要从这个表中查询出以AB开头的料号,如果使用NHibernate,那么我们常用的写法有: //QueryOver的写法...).List(); //Linq to NHibernate result = session.Query().Where(c => c.Matnr.StartsWith...")); where条件也是一样的: WHERE [Extent1]....但是如果用NHibernate就要麻烦点了,我们必须要判断用户输入的字符串里面是否有特殊转移符,如果有,那么就需要进行替换,而且C#查询语句也有所不同。...这种写法比escape关键字的写法要简单点,对应的SQL为: select * from YCMRSALE s inner join matnr m on s.MATNR like replace(replace
开发过程 HNibernate将会有一些工具帮助你,如:生成schema,根据映射文件(Mapping file)生成类,并更新schema(一个新开发者的建议).然而,在本文档中,前提是你已经手动的数据库的创建喝...步骤1:创建数据库表 我们正在做的是一个非常简单的NH示例.在这个例子里面,我们实现一个基本的用户管理子系统.我们将会使用一个user表(sql server 2000): use NHibernate...name"属性值就是我们写的.Net类中的属性,column属性值就是在数据库中与'Net类属性对应的字段名.type属性是可选的(如果你没有标明,NH会给出一个最适合的),但是推荐的做法是带上这个属性...在代码里面使用NHibernate是很简单的事情: 1. 创建一个Configuration对象. 2....更好的是,你可以从数据库中查询到一个System.Collections.IList: IList userList = session.CreateCriteria(typeof(User)).List
开发过程 HNibernate将会有一些工具帮助你,如:生成schema,根据映射文件(Mapping file)生成类,并更新schema(一个新开发者的建议).然而,在本文档中,前提是你已经手动的数据库的创建喝....Net类的编写… 这里是我们要做的: 1....步骤1:创建数据库表 我们正在做的是一个非常简单的NH示例.在这个例子里面,我们实现一个基本的用户管理子系统.我们将会使用一个user表(sql server 2000): use NHibernate...在代码里面使用NHibernate是很简单的事情: 1. 创建一个Configuration对象. 2....更好的是,你可以从数据库中查询到一个System.Collections.IList: IList userList = session.CreateCriteria(typeof(User)).List
NHibernate 多对多映射的数据更新 最近在用 NHibernate 做多对多更新时突然发现 NHibernate 更新的策略很差, 对多对多关系的更新居然是先全部删除再插入全部数据, 感觉非常奇怪...Int32 (0)], @p1 = 9 [Type: Int32 (0)] 在 NHibernate 参考文档的 19.5....不只是多对多, 如果你的集合需要更新, NHibernate 推荐的是: 19.5.2....This is because IList.Add() must always succeed for a bag or IList (unlike an ISet)....sess.Flush(); 由此可见, bag 在多对多映射更新时性能较差, 如果不需要更新,则可以放心使用, 在需要更新时则 set 是更好的选择。
在对象模型层面,Order对象中有个属性IList Items,对应其中的订单明细OrderItem。...大体意思就是,NHibernate默认使用Order的属性作为有效的关联,换句话说,只需要把OrderItem一个个的加入到Order的Items集合即可,最终结果不需要关心OrderItem中引用的...>(){e1}; 7: a2.Emps = new List() { e1 }; 从DomainModel来说,这样设置是对的,但是生成SQL却有问题: 1: NHibernate...2条记录的,但是这样5-8行却变成了插入4条记录。...语句,当然如果把C#代码中的6行和7行去掉,结果也是正确的,因为现在系统只认Emp中的Awards集合了。
,我们使用了Fluent NHibernate的Mapping方式代替XML配置。...使用Fluent NHibernate的最大好处是降低了出错的机会,因为Fluent Nhibernate的配置是使用C#来编写,可以智能感知,而且还能编译,不像原始的XML配置,写错了都不知道。...(比如一个班对应多个学生,在Class类中就有public virtual IList Students{get;set;},而在Student类中就必须使用Class作为属性名:public...+“_ID” if (instance.Type == typeof(long))//接下来设置主键的生成方式为HiLo值方式 { instance.GeneratedBy.HiLo...List//默认情况下抽象类是不会Mapping成表的,所以这里需要指明这些类是要Mapping成表的
一、EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架。这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择。...(该表有1万行记录) static void ModelFirstReadPosts() { var dbContext = new MyAppDBContext();...); // 一次插入多条记录 IList postRecords = new List(); postRecords.Add...与那些功能完备的ORM(如NHibernate或Entity Framework)不同的是,PetaPoco更注重易用性和性能,而非丰富的功能。...使用PetaPoco只需要引入一个C#文件,可以使用强类型的 POCO(Plain Old CLR Object),并支持使用T4模板生成的类等等。
Blog类其实代表的是数据库中Blog表,一个Blog实例就代表着一行数据,然后通过该表取到一些行,这些行又被封装成Blog类(细究起来还是很乱,是吧?)。...通过不断的演化,我最后形成了一个Entity的project,负责且仅负责对象状态的改变,而完全不涉及对象的加载存储等功能。 这样做最大的好处,就是解决了Entity的单元测试的问题。.../// 为什么是NHibernate? /// 1、我的项目开始得比较早,好几年前了,应该是。...当时Entity Framework还很不成熟,所以没有办法,只能选择NHibernate /// 2、我想看一看微软框架以外的世界。...我非常理解他的疑惑,一次次的把一个Entity里面的Article的属性取出来,再一条条的放到一个ArticleViewModel里面去,这多闹心啊?吃饱了撑的?
,而不是实现,是因为他既可以是实现了IListSource的类型,也可以是实现了IList的类型,例如:List类型,DataTable类型等,这里就不一一列举了,今天我主要实现的功能如标题所描述的:实现...,但可完整显示已加载的所有数据,这种应用场景在C/S端很常见,B/S端上也有(例如QQ空间动态下面的加载更多按钮) 以下是实现附加数据两种方式: 第一种方式,采用反射获取属性值并循环添加数据行...方法种注释掉的方法是我写的显示遮罩层的方法,如果大家需要,可以查看我的这篇博文:Winform应用程序实现通用遮罩层 使用方法如下: 1.添加DataGridView控件,然后将DataGridView...2.设置DataGridView列,将列的DataPropertyName设置为需要绑定的数据字段名称,这步很重要。...3.然后查询数据并调用扩展方法: //dataGridView2Demo为DataGridView2类型 //dataSource为查询到的数据 dataGridView2Demo.AppendData
Dapper应用 1.Dapper是什么 Dapper是一款轻量级ORM工具。...如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。...Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。 支持多种数据库。...通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。 支持FrameWork2.0,3.0,3.5,4.0,4.5 3.使用Dapper.Net并演示 1....4.4 封装搭建 该类实现接口 public interface IDaoBase where T : class { int Count(IPredicate
领取专属 10元无门槛券
手把手带您无忧上云