目录

写在前面

操作步骤

总结

写在前面

昨天有朋友问我在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. mongoDB的安装(一)

    0.安装环境说明: linux系统:centos6.5 mongoDB版本:mongodb-linux-x86_64-rhel62-3.2.7.tgz 1.下载 mongoDB的下载:https:// ...

  2. Windows10的革命之路-全新UWP开发平台

    众所周知,最近几年,微软一直在操作系统上进行统一化的尝试.第一次尝试的产品——Windows 8/8.1操作系统完全谈不上成功.请看下图: 我个人认为,这并不意味着操作系统统一化的策略是错误的,只能算 ...

  3. 编译软件基础知识(1/2) via LinuxSir

    内容来自LinuxSir: 如果不出意外的话,会出现say.so => not found. 这时的./test是不能运行的.但至少说明程序运行时是需要这个库的.那为什么找不到这个库呢?那就让我 ...

  4. WPF RichTextbox

    WPFTextBoxAutoComplete AvalonEdit WPF SyntaxHighlightBox   WinForm 下的 Fast Colored TextBox for Synta ...

  5. plain framework 1(简约框架)一款主要用于网络(游戏)开发的C/C++框架 即将开源发布

    在我们的日常开发中,我们往往会遇到这种情况,当我们换了一个开发环境时很可能会重新利用一套新的框架进行开发.由于不同框架有着不同的接口,所以我们不得不花时间再次熟悉这些接口,这将造成开发时间上的重复,而 ...

  6. 【2016-10-26】【坚持学习】【Day13】【WCF】【EF + Data Services】

    今天做了一个demo, EF+Data Services 先建立一个网站项目 添加一个ADO.NET 数据模型 相当于一个EF容器,用来连接MSSQL数据库 添加一个WCF Data Services ...

  7. MIDI信息为什么不能通过FL Studio输出

    讲解这个问题之前,小编先给大家科普一下什么是MIDI.所谓的MIDI其实只是数字信号,和我们熟知的乐谱有点像.它的作用就是能很好的传达什么时间演奏什么音,这个音要演奏多久等信息,就如同我们演唱会中指挥 ...

  8. LoadRunner录制Web协议的脚本 (by网络)

    LoadRunner录制Web协议的脚本  http://itindex.net/detail/50530-loadrunner-web-脚本

  9. 洛谷P1991无线通讯网[kruskal | 二分答案 并查集]

    题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...

  10. MATLAB数字图像处理基础

    图像的输入.输出和显示 1.图像的输入    imread('filename'),  实际中写的是 >> f = imread('sky.jpg'); 2.图像的显示    imshow ...