目录

写在前面

操作步骤

总结

写在前面

昨天有朋友问我在nhibernate中如何使用sqlite数据库,当时实在忙的不可开交,下周要去山西出差,实在没空,按我的说法使用sqlite跟使用sqlserver,本质上其实没啥区别,nhibernate的配置文件不同而已,而且在下载nhibernate的时候,他已经提供了针对不同的数据库的模版了。你只需在这基础上修改即可。

别人问到了,再加上即将的项目中需要用到sqlite数据库,就也趁着这股风总结一下,算是弄一个在nhibernate中使用sqlite的模版吧。

操作步骤

可视化工具:http://www.oschina.net/news/43608/5-popular-and-free-sqlite-management-tools

SqliteSpy:http://www.yunqa.de/delphi/doku.php/products/sqlitespy/index

说到sqlite,得创建一个sqlite数据库啊,上面的工具,你可以选择一个用着顺手的工具使用,我这里就使用sqlitespy这个工具,新建一个shop数据库,新建一个userinfo的数据表。

下载sqlite的dll:http://www.sqlite.org/,或者使用Nuget安装

创建数据表的sql语句

 create table UserInfo
(
ID int primary key not null,
UserName nvarchar(32),
Gender bit,
Age int,
Address nvarchar(128)
)

如图:

新建个测试用的项目,项目结构如图所示:

关于项目结构就不进行说明了,项目名称已经比较清楚了。

项目Wolfy.Data和Wolfy.UnitTest需要引用System.Data.SQLite.dll,并把SQLite.Interop.dll放在bin\debug下(因为这个dll是引用不了的)。

从下载的nhibernate中找到sqlite的数据库的配置模版

将名称修改为hibernate.cfg.xml,复制到单元测试项目下,并修改该文件的属性为始终复制,内容如下:

 <?xml version="1.0" encoding="utf-8"?>
<!--
This template was written to work with NHibernate.Test.
Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it
for your own use before compile tests in VisualStudio.
-->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
<property name="connection.connection_string">
Data Source=nhibernate.db
</property>
<property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
</session-factory>
</hibernate-configuration>

修改内容,使其使用于当前项目

 <?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="sqlite_session">
<property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
<property name="connection.connection_string">
Data Source=C:\Users\Wolfy\Desktop\SQLiteSpy_1.9.8\Shop.db3
</property>
<property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
<mapping assembly="Wolfy.Domain"/>
</session-factory>
</hibernate-configuration>

注意,把不必要的注释去掉,避免不不要的麻烦。

通用NHibernateHelper类

测试用的持久化类

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Wolfy.Domain.Entity
{
/// <summary>
/// 用户持久化类
/// </summary>
public class UserInfo
{
/// <summary>
/// 用户标识
/// </summary>
public virtual int ID { set; get; }
/// <summary>
/// 用户姓名
/// </summary>
public virtual string UserName { set; get; }
/// <summary>
/// 性别
/// </summary>
public virtual bool Gender { set; get; }
/// <summary>
/// 年龄
/// </summary>
public virtual int Age { set; get; }
/// <summary>
/// 住址
/// </summary>
public virtual string Address { set; get; }
}
}

对应的持久化类的映射文件,UserInfo.hbm.xml并修改其属性生成操作为“嵌入资源”

 <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Wolfy.Domain" namespace="Wolfy.Domain.Entity">
<class name="Wolfy.Domain.Entity.UserInfo,Wolfy.Domain" table="UserInfo">
<!--主键 如果没有设置值则默认为0-->
<id name="ID" type="Int32" unsaved-value="0">
<column name="ID" sql-type="int" not-null="true" unique="true"/>
<!--主键自增-->
<generator class="increment"></generator>
</id>
<property name="UserName" type="String">
<column name="UserName" sql-type="nvarchar" not-null="false"/>
</property>
<property name="Gender" type="Boolean">
<column name="Gender" sql-type="bit" not-null="false"></column>
</property>
<property name="Age" type="Int32">
<column name="Age" sql-type="int" not-null="false"></column>
</property>
<property name="Address" type="String">
<column name="Address" sql-type="nvarchar" not-null="false"/>
</property>
</class>
</hibernate-mapping>

在Wolfy.Data下添加类UserInfoData

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate.Cfg;
using NHibernate;
using Wolfy.Domain.Entity;
namespace Wolfy.Data
{
/// <summary>
/// 用户数据层操作
/// </summary>
public class UserInfoData
{
/// <summary>
/// 添加用户
/// </summary>
/// <param name="userInfo"></param>
/// <returns></returns>
public bool AddUserInfo(UserInfo userInfo)
{
ISession session = NHibernateHelper.GetOcextSession();
using (ITransaction trans = session.BeginTransaction())
{
try
{
session.SaveOrUpdate(userInfo);
session.Flush();
trans.Commit();
return true;
}
catch (Exception)
{
trans.Rollback();
return false;
throw;
}
}
}
}
}

在单元测试项目下添加DataTest.cs进行单元测试,如下

 using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Wolfy.Domain.Entity;
using Wolfy.Data; namespace Wolfy.UnitTest
{
[TestClass]
public class DataTest
{
private UserInfoData _userInfoData;
public DataTest()
{
_userInfoData = new UserInfoData();
}
[TestMethod]
public void AddUserInfoTest()
{
bool result = _userInfoData.AddUserInfo(new UserInfo()
{
Address = "北京",
Age = ,
Gender = true,
UserName = "wolfy"
});
Assert.IsTrue(result);
}
}
}

添加一个用户wolfy,并断言结果为true,即添加成功,测试结果,使用sqlitespy工具查看sqlite数据库中的数据

关于查删改的操作类似,就不再进行测试了。

总结

弄一个sqlite数据库的配置,其实也没多大难度,关键还是nhibernate的配置文件,及持久化类的映射文件这块,你把这两个弄通了,其他的都好说,基本上类似,比如映射文件,你完全可以把内容复制到其他持久化类的映射文件中,并在这个基础上改吧改吧就是一个新的,关键还是第一步,你有没有走通。总结就到这里吧,你在使用的过程中,如果用到sqlite,可以将上面nhibernate配置文件和userinfo的映射文件作为模版,使用的时候,就在这基础上改吧改吧就行了。本文已加入Nhibernate系列:http://www.cnblogs.com/wolf-sun/p/4138918.html

demo地址:http://pan.baidu.com/s/1c0F6cSC

[Nhibernate]sqlite数据库基本使用的更多相关文章

  1. SQLite数据库和JPA简单介绍

    SQLite数据库和JPA简单介绍 一.SQLite简单使用 SQLite是遵循ACID的关系数据库管理系统,它的处理速度很快,它的设计目标是嵌入式的,只需要几百K的内存就可以了. 1.下载SQLit ...

  2. Android之SQLite数据库篇

    一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大. 二.SQLite的特点 1.轻量级使用 SQLit ...

  3. Qt5 开发 iOS 应用之访问 SQLite 数据库

    开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1   源代码: 我在 Qt 程序里指定了数据库的名称来创建数据库,在 Win10.An ...

  4. 【Win 10 应用开发】Sqlite 数据库的简单用法

    如果老周没记错的话,园子里曾经有朋友写过如何在 UWP 项目中使用 Sqlite数据库的文章.目前我们都是使用第三方封装的库,将来,SDK会加入对 Sqlite 的支持. 尽管目前 UWP-RT 库中 ...

  5. Android之SQLite数据库使用

    转载整理于:http://my.csdn.net/lmj623565791 我刚开始接触Android的时候甚至都不敢相信,Android系统竟然是内置了数据库的!好吧,是我太孤陋寡闻了.由于我之前是 ...

  6. 让PDF.NET支持最新的SQLite数据库

    最近项目中用到了SQLite,之前项目中用的是PDF.NET+MySQL的组合,已经写了不少代码,如果能把写好的代码直接用在SQLite上就好了,PDF.NET支持大部分主流的数据库,这个当然可以,只 ...

  7. iOS sqlite数据库图像化查看

    问题描述:在xocde上用sqlite数据库的时候,因为没有图形化界面,有些时候很难看出自己设计的数据库是否有问题,比如我刚上手sqlite数据库设计id为自增长时,很自然的用了identify(1, ...

  8. Android中SQLite数据库小计

    2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for ...

  9. Android开发-之SQLite数据库

    之前我们讲了如何将数据存储在文件中,那么除了这种方式呢,就是我们常见的大家都知道的将数据存储在数据库当中了. 将数据存储在数据库中的优势: 1)存储在数据库中的数据更加方便操作,比如增.删.改.查等 ...

随机推荐

  1. linux中inode、软链接、硬链接

    1 软链接 linux中软链接理解成window中的快捷方式.创建软链接的命令 ln -s 源文文件或目录 目标文件或目录 2 硬链接 创建硬链接的命令如下 ln  源文文件或目录 目标文件或目录 3 ...

  2. extjs学习资料

    ExtJs 入门教程 1.Extjs5.1.0教程云盘地址 http://pan.baidu.com/s/1qYhHiEw 2.Extjs3.x如下:   ExtJs 入门教程一[学习方法] ExtJ ...

  3. JS控制div跳转到指定的位置的解决方案总结

    总结一下自己在写这个需求遇到的问题,相信大家应该是经常遇到的.即要求滚轮滚动到指定的位置.先看下基本的解决方案. 1.给链接a加个#的方式来实现跳转.(锚点方法)这里直接贴下代码: html页面: & ...

  4. What is a RaycastHit normal?

    The normal is the direction pointing away from the collider it hits. http://answers.unity3d.com/ques ...

  5. [转载]彻底弄清struct和typedef struct

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

  6. jdbc执行Statement接口的步骤

    jdbc执行Statement接口的步骤如下: 1)驱动注册程序: Class.forName(com.mysql.jdbc.Driver); 2)获取连接对象: Connection conn = ...

  7. Java开发环境的搭建以及使用eclipse从头一步步创建java项目

    一.java 开发环境的搭建 这里主要说的是在windows 环境下怎么配置环境. 1.首先安装JDK java的sdk简称JDK ,去其官方网站下载最近的JDK即可..http://www.orac ...

  8. Microsoft Client Development MVP 2013 - 2014

    周末一直沉浸在醉意中,为婚礼忙忙碌碌了一个月,终于完成了人生一大喜事. 清晨仍旧有一些宿醉得感觉, 看到来自微软的邮件,获得Microsoft Client Development MVP 2013 ...

  9. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 角色成员功能的改进支持公司加入到角色

    我们公司有1万多个网点,每个网点都可以看成是一个公司,公司对不同的网点有不同的策略,商业逻辑,每个网点的人员也都是在不断变化,全国有接近10万从业人员,当我们设计好业务逻辑程序后,不可能因为这些人员的 ...

  10. win8安装SQL Server 2005问题解决方法

    win8安装SQL Server 2005问题解决方法 1.正常安装任一版本的SQL Server 2005(最好安装企业版). 2.安装到SqlServer服务的时候提示启动服务失败(提示重试的时候 ...