[Nhibernate]sqlite數據庫基本使用


目錄

寫在前面

操作步驟

總結

寫在前面

昨天有朋友問我在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語句

1 create table UserInfo
2 (
3 ID int primary key  not null,
4 UserName nvarchar(32),
5 Gender bit,
6 Age int,
7 Address nvarchar(128)
8 )

如圖:

新建個測試用的項目,項目結構如圖所示:

關於項目結構就不進行說明了,項目名稱已經比較清楚了。

項目Wolfy.Data和Wolfy.UnitTest需要引用System.Data.SQLite.dll,並把SQLite.Interop.dll放在bin\debug下(因為這個dll是引用不了的)。

從下載的nhibernate中找到sqlite的數據庫的配置模版

將名稱修改為hibernate.cfg.xml,復制到單元測試項目下,並修改該文件的屬性為始終復制,內容如下:

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

修改內容,使其使用於當前項目

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

注意,把不必要的注釋去掉,避免不不要的麻煩。

通用NHibernateHelper類

測試用的持久化類

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Wolfy.Domain.Entity
 8 {
 9     /// <summary>
10     /// 用戶持久化類
11     /// </summary>
12     public class UserInfo
13     {
14         /// <summary>
15         /// 用戶標識
16         /// </summary>
17         public virtual int ID { set; get; }
18         /// <summary>
19         /// 用戶姓名
20         /// </summary>
21         public virtual string UserName { set; get; }
22         /// <summary>
23         /// 性別
24         /// </summary>
25         public virtual bool Gender { set; get; }
26         /// <summary>
27         /// 年齡
28         /// </summary>
29         public virtual int Age { set; get; }
30         /// <summary>
31         /// 住址
32         /// </summary>
33         public virtual string Address { set; get; }
34     }
35 }

對應的持久化類的映射文件,UserInfo.hbm.xml並修改其屬性生成操作為“嵌入資源”

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <hibernate-mapping  xmlns="urn:nhibernate-mapping-2.2" assembly="Wolfy.Domain"  namespace="Wolfy.Domain.Entity">
 3   <class name="Wolfy.Domain.Entity.UserInfo,Wolfy.Domain" table="UserInfo">
 4     <!--主鍵 如果沒有設置值則默認為0-->
 5     <id name="ID" type="Int32" unsaved-value="0">
 6       <column name="ID" sql-type="int" not-null="true" unique="true"/>
 7       <!--主鍵自增-->
 8       <generator class="increment"></generator>
 9     </id>
10     <property name="UserName" type="String">
11       <column name="UserName" sql-type="nvarchar"  not-null="false"/>
12     </property>
13     <property name="Gender" type="Boolean">
14       <column name="Gender" sql-type="bit" not-null="false"></column>
15     </property>
16     <property name="Age" type="Int32">
17       <column name="Age" sql-type="int" not-null="false"></column>
18     </property>
19     <property name="Address" type="String">
20       <column name="Address" sql-type="nvarchar"  not-null="false"/>
21     </property>
22   </class>
23 </hibernate-mapping>

在Wolfy.Data下添加類UserInfoData

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using NHibernate.Cfg;
 7 using NHibernate;
 8 using Wolfy.Domain.Entity;
 9 namespace Wolfy.Data
10 {
11     /// <summary>
12     /// 用戶數據層操作
13     /// </summary>
14     public class UserInfoData
15     {
16         /// <summary>
17         /// 添加用戶
18         /// </summary>
19         /// <param name="userInfo"></param>
20         /// <returns></returns>
21         public bool AddUserInfo(UserInfo userInfo)
22         {
23             ISession session = NHibernateHelper.GetOcextSession();
24             using (ITransaction trans = session.BeginTransaction())
25             {
26                 try
27                 {
28                     session.SaveOrUpdate(userInfo);
29                     session.Flush();
30                     trans.Commit();
31                     return true;
32                 }
33                 catch (Exception)
34                 {
35                     trans.Rollback();
36                     return false;
37                     throw;
38                 }
39             }
40         }
41     }
42 }

在單元測試項目下添加DataTest.cs進行單元測試,如下

 1 using System;
 2 using Microsoft.VisualStudio.TestTools.UnitTesting;
 3 using Wolfy.Domain.Entity;
 4 using Wolfy.Data;
 5 
 6 namespace Wolfy.UnitTest
 7 {
 8     [TestClass]
 9     public class DataTest
10     {
11         private UserInfoData _userInfoData;
12         public DataTest()
13         {
14             _userInfoData = new UserInfoData();
15         }
16         [TestMethod]
17         public void AddUserInfoTest()
18         {
19             bool result = _userInfoData.AddUserInfo(new UserInfo()
20             {
21                 Address = "北京",
22                 Age = 25,
23                 Gender = true,               
24                 UserName = "wolfy"
25             });
26             Assert.IsTrue(result);
27         }
28     }
29 }

添加一個用戶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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM