使用 NHibernate 3.1 的增删改

简介: 题外话: 虽然微软推出了EF4,但是目前支持EF4的虚拟空间很少,即使有支持的空间,价格也非常昂贵,所以使用NH3.1是比较好的选择,并且NH3.1与EF4一样支持Linq和Lambda表达式。如果对EF4有兴趣的,可以看我之前的一篇博文“Asp.

题外话:

虽然微软推出了EF4,但是目前支持EF4的虚拟空间很少,即使有支持的空间,价格也非常昂贵,所以使用NH3.1是比较好的选择,并且NH3.1与EF4一样支持Linq和Lambda表达式。如果对EF4有兴趣的,可以看我之前的一篇博文“Asp.net MVC 2.0 + Unity 2.0(IoC) + EF4.0 实例:RoRoWoBlog 开源项目框架代码

 

需要的DLL库文件:

1、从官方下载NHibernate-3.1.0.GA-bin.zip,需要用到压缩包中的DLL文件如下:

NHibernate-3.1.0.GA-bin\Required_Bins\Iesi.Collections.dll

NHibernate-3.1.0.GA-bin\Required_Bins\NHibernate.dll

NHibernate-3.1.0.GA-bin\Required_For_LazyLoading\LinFu\NHibernate.ByteCode.LinFu.dll

NHibernate-3.1.0.GA-bin\Required_For_LazyLoading\LinFu\LinFu.DynamicProxy.dll

 

2、下载ConfORM1.0.1.4_NH3.1GA.zip,需要用到压缩包中的DLL文件如下:

ConfORM1.0.1.4_NH3.1GA\ConfOrm.dll

 

创建实体类:

 

using  System.Collections.Generic; 
using  System.Text; 
using  System; 


namespace  DiPiPi.Infrastructure.Hibernate.Entity {
    
    
public   class  BlogTag {
        
public  BlogTag() { }
        
public   virtual   int  Tag_ID {  get set ; }
        
public   virtual   string  TagName {  get set ; }
        
public   virtual   string  ArticleIDs {  get set ; }
    }
}

 

增删改操作代码:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using NHibernate.Dialect;
using NHibernate.Cfg;
using NHibernate.Cfg.Loquacious;
using NHibernate.Cfg.MappingSchema;
using NHibernate.Driver;
using NHibernate.Tool.hbm2ddl;

using NHibernate.ByteCode.LinFu;
using ConfOrm;
using ConfOrm.NH;
using DiPiPi.Infrastructure.Hibernate.Entity;

namespace DiPiPi.Infrastructure.Hibernate
{
    
public static class DBHelper
    {
        
private const string _ConnectionString =
        
@"Data Source=localhost;Initial Catalog=DiPiPiDB;Integrated Security=True;Pooling=False";


        
public static Configuration GetConfiguration()
        {
            
            var configure 
= new Configuration();

            configure.SessionFactoryName(
"DiPiPiDB");

            
//Proxy扩展方法用于配置NHibernate延迟加载的字节码提供程序
            configure.Proxy(p => p.ProxyFactoryFactory<ProxyFactoryFactory>());

            configure.DataBaseIntegration(db 
=>
            {
                db.Dialect
<MsSql2005Dialect>();
                db.Driver
<SqlClientDriver>();
                db.ConnectionString 
= _ConnectionString;
            });

            
return configure;

        }

        
public static HbmMapping GetMapping()
        {
            
            var orm 
= new ObjectRelationalMapper();
            orm.TablePerClass
<BlogTag>();
            var mapper 
= new Mapper(orm);
            
return mapper.CompileMappingFor(new[] { typeof(BlogTag) });
        }

        
public static void Test()
        {
            
//配置NHibernate
            var conf = GetConfiguration();
            
//在Configuration中添加HbmMapping
            conf.AddDeserializedMapping(GetMapping(), "BlogTag");
            
//配置数据库架构元数据
            SchemaMetadataUpdater.QuoteTableAndColumns(conf);
            
//创建数据库架构
            new SchemaExport(conf).Create(falsetrue);
            
//建立SessionFactory
            var factory = conf.BuildSessionFactory();
            
//打开Session做持久化数据
            using (var s = factory.OpenSession())
            {
                
using (var tx = s.BeginTransaction())
                {
                    var blogTag 
= new BlogTag { TagName = "我的测试" };
                    s.Save(blogTag);
                    tx.Commit();
                }
            }

            
//查询、排序
            using (var s = factory.OpenSession())
            {
                var query 
= s.QueryOver<BlogTag>()
                .Where(p 
=> p.TagName == "我的测试")
                .OrderBy(p 
=> p.Tag_ID).Asc
                .List();
            }

            
//打开Session做删除数据
            using (var s = factory.OpenSession())
            {
                
using (var tx = s.BeginTransaction())
                {
                    s.CreateQuery(
"delete from BlogTag").ExecuteUpdate();
                    tx.Commit();
                }
            }
            
//删除数据库架构
            new SchemaExport(conf).Drop(falsetrue);

        }

    }
}

 

 另外值得一提的是,new SchemaExport(conf).Create(false, true); 这里是先写实体代码再创建的数据库哦,呵呵 ^_^,大家一直追求的 Code First 哈。

 

 

 

目录
相关文章
|
7月前
|
算法 数据库
Mybatis-Plus实现常规增删改操作
Mybatis-Plus实现常规增删改操作
68 0
|
Java 数据库连接
Hibernate实现简单的CRUD操作和常见类(三)下
Hibernate实现简单的CRUD操作和常见类(三)
120 0
Hibernate实现简单的CRUD操作和常见类(三)下
|
Java 数据库连接 数据库
Hibernate实现简单的CRUD操作和常见类(三)上
Hibernate实现简单的CRUD操作和常见类(三)
180 0
Hibernate实现简单的CRUD操作和常见类(三)上
|
Java 数据库连接 关系型数据库
Hibernate通过createSQLQuery( )方法实现增删改查
Hibernate通过createSQLQuery( )方法实现增删改查http://www.bieryun.com/3112.html Hibernate的三种实现方式之一:createSQLQuery( ) 一、项目结构 二、hibernate核心配置文件:   hibernate.
1220 0
|
数据库 .NET 开发框架
|
数据库 .NET 开发框架
EntityFramework实现增删改查
17-2-23 EF数据库表一定要有主键 【EF实现修改和删除】 ctx.Entry(user).State = System.Data.Entity.EntityState.
918 0
|
SQL 存储 Java
Hibernate高级查询
@Test DDL创建表 hibernate标准化对象查询(QBC) 也即是把查询条件封装成一个对象,它支持运行时动态生成查询语句 Criteria接口 存放查询条件的容器 Criteria criteria=session.
1459 0