参考:http://www.cnblogs.com/hbhzsysutengfei/p/6078898.html 博客
首先结构如下:
首先添加数据库的配置文件hibernate.cfg.xml(生成操作嵌入式资源和始终复制)
<?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> <property name="connection.connection_string">Data Source=.;user=sa;password=654123;Initial Catalog=NHibernate</property> <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property> <property name="show_sql">true</property> <property name="hbm2ddl.auto">update</property> <!--Mapping files 嵌入式资源 表格table 名字不可以是user-->
<mapping assembly="MyNHibernate"/>
</session-factory>
</hibernate-configuration>
增加一个User实体
所有的属性都是使用virtual来修饰(延迟加载有用),添加对应的get set方法
在MSServer 中,user 是关键字,因此不能够有user的表格,可以使用其他来代替
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyNHibernate.Models { public class User { public virtual int Id { get; set; } public virtual string CustomName { get; set; } public virtual string Account { get; set; } public virtual string Password { get; set; } public virtual string Email { get; set; } public virtual string Mobile { get; set; } public virtual int? CompanyId { get; set; } public virtual string CompanyName { get; set; } public virtual int State { get; set; } public virtual int UserType { get; set; } public virtual DateTime? LastLoginTime { get; set; } public virtual int CreatorId { get; set; } public virtual DateTime CreateTime { get; set; } public virtual int? LastModifierId { get; set; } public virtual DateTime? LastModifyTime { get; set; } } }
创建实体映射User.hbm.xml,并设置为嵌入资源(右键—属性—生成操作—嵌入的资源)
<?xml version="1.0" encoding="utf-8" ?> <!--assembly:项目名称,namespace:在项目中Model类的命名空间,如果省略的话,需要在后面的class name属性中填写完整的名字空间和类名--> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MyNHibernate" namespace="MyNHibernate.Models" default-lazy="true"> <!--注意table的名字不能写成user,否则报错,因为user是数据库的关键字--> <!--注意:name的第一个为类的命名空间,第二个为程序集的名字--> <class name="MyNHibernate.Models.User,MyNHibernate" table="[dbo].[User]" lazy="true" dynamic-insert="true" dynamic-update="true"> <!--<class name="User" table="client">--> <id name="Id" column="[Id]"> <generator class="identity" /> </id> <property name="CustomName" column="[Name]"/> <property name="Account" column="[Account]"/> <property name="Password" column="[Password]"/> <property name="Email" column="[Email]"/> <property name="Mobile" column="[Mobile]"/> <property name="CompanyId" column="[CompanyId]"/> <property name="CompanyName" column="[CompanyName]"/> <property name="State" column="[State]"/> <property name="UserType" column="[UserType]"/> <property name="LastLoginTime" column="[LastLoginTime]"/> <property name="CreatorId" column="[CreatorId]"/> <property name="CreateTime" column="[CreateTime]"/> <property name="LastModifierId" column="[LastModifierId]"/> <property name="LastModifyTime" column="[LastModifyTime]"/> </class> </hibernate-mapping>
编写NHibernate的帮助类NHibernateFactory,初始化NHibernate的环境,获取Session
using NHibernate; using NHibernate.Cfg; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyNHibernate { public class NHibernateFactory { private static readonly ISessionFactory sessionFactory; private static string HibernateHbmXmlFileName = "hibernate.cfg.xml"; //private static ISession session static NHibernateFactory() { string totalPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ConfigFiles\hibernate.cfg.xml"); Configuration configuration = new Configuration().Configure(totalPath); //iSessionFactory = configuration.BuildSessionFactory(); sessionFactory = configuration.BuildSessionFactory();// new Configuration().Configure().BuildSessionFactory(); } public static ISessionFactory GetSessionFactory() { return sessionFactory; } public static ISession GetSession() { return sessionFactory.OpenSession(); } public static void CloseSessionFactory() { } } }
查询和添加:
using MyNHibernate.Models; using NHibernate; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyNHibernate { class Program { static void Main(string[] args) { User user = new User();// createUser(); user.Account = "qaer"; user.CompanyId = 1; user.Password = "123456456"; user.UserType = 2; user.State = 1; user.CreateTime = DateTime.Now; user.CreatorId = 1; user.CompanyName = "ceshi"; user.Email = "126585899@qq.com"; user.CustomName = "23213"; user.LastModifierId = 1; user.Mobile = "5585464454"; ISession session = NHibernateFactory.GetSession(); var dd = session.Get<User>(7);
var data = session.Query<User>().Where(c => c.Id > 4).ToList(); ITransaction tx = session.BeginTransaction(); session.Save(user); tx.Commit(); session.Close();
} } }
未能加载问题:http://blog.csdn.net/tyh800220/article/details/1733133