使用 NHibernate 3.1 的增删改

简介:

题外话:

虽然微软推出了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(false, true);
//建立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(false, true);

}

}
}

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




本文转自远哥博客园博客,原文链接:http://www.cnblogs.com/taven/archive/2011/04/08/2009847.html,如需转载请自行联系原作者

相关文章
|
算法 架构师 安全
10年Java面试总结:Java程序员面试必备的面试技巧
作为一名资深10年Java技术专家,我参与了无数次的面试,无论是作为面试者还是面试官。在这里,我将分享我的一些面试经历和面试技巧,希望能帮助即将面临面试的Java程序员们。回顾我的Java职业生涯,我清晰地记得一次特别的面试经历。那是我申请一家知名科技公司的Java开发岗位。为了这次面试,我花了几周的时间准备,这不仅包括Java的基础和高级知识,还有关于公司产品的研究。
687 0
|
5月前
|
安全 Java API
深入解析 Spring Security 配置中的 CSRF 启用与 requestMatchers 报错问题
本文深入解析了Spring Security配置中CSRF启用与`requestMatchers`报错的常见问题。针对CSRF,指出默认已启用,无需调用`enable()`,只需移除`disable()`即可恢复。对于`requestMatchers`多路径匹配报错,分析了Spring Security 6.x中方法签名的变化,并提供了三种解决方案:分次调用、自定义匹配器及降级使用`antMatchers()`。最后提醒开发者关注版本兼容性,确保升级平稳过渡。
626 2
|
Java Maven
idea中maven项目pom文件Could not acquire lock(s)
idea中maven项目pom文件Could not acquire lock(s)
7711 2
|
12月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
11月前
|
物联网 C#
【C#】简单的蓝牙通讯功能实现
【C#】简单的蓝牙通讯功能实现
522 0
|
11月前
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
872 0
|
12月前
|
敏捷开发
敏捷开发:拥抱变化,快速迭代
在软件开发领域,敏捷开发已成为应对快速变化、提升交付效率的有效方法。它强调团队协作、客户反馈和灵活应变,核心价值观包括个体互动优先于流程工具、可工作软件优先于详尽文档、客户合作优先于合同谈判、响应变化优先于遵循计划。敏捷开发通过跨功能团队、短周期迭代、持续改进和客户紧密合作等实践,实现高效开发和创新。虽然面临抵抗变化、管理期望等挑战,但敏捷思维能显著提升团队表现和产品品质。
|
开发框架 NoSQL 前端开发
在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息
在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息
|
12月前
|
Shell Linux
8-2|如何查看history带日期
8-2|如何查看history带日期