NHibernate+SQLite 学习笔记(二)+使用FLuent NHibernate 建立会话工厂(session factory) 并对数据库进行操作(open Session)

1、创建一个会话工厂(session factory)

#region //********************创建一个会话工厂---Create Session Factory*******************//
private void btnCreateSessionFactory_Click(object sender,RoutedEventArgs e)
{
var factory = CreateSessionFactory();
}
private ISessionFactory CreateSessionFactory()
{
//*********************SQL Server************************//
//return Fluently.Configure()
//.Database(MsSqlConfiguration
//.MsSql2012
//.ConnectionString(connString))
//.Mappings(m => m.FluentMappings
//.AddFromAssemblyOf<ProductMap>())
//.BuildSessionFactory();
//*********************SQLite************************//
return Fluently.Configure().Database(SQLiteConfiguration.Standard.UsingFile(datasource))
.Mappings(m => m.FluentMappings
.AddFromAssemblyOf<ProductMap>())
//.ExposeConfiguration(CreateSchema)     ////因为CreateSchema是重新映射了一次数据库,存在这句的时候当对表进行添加数据时永远只有一个值,其他的都会消失,而不存在这句时候则会新增加数据。
.BuildSessionFactory();
}
#endregion

2、打开会话对数据库进行操作(open Session、seesion.Save、session.Query操作)

#region //*************************打开会话,对数据库进行操作*********************//
//******************************打开一个会话,不操作****************************//
private void btnCreateSession_Click(object sender,RoutedEventArgs e)
{
var factory = CreateSessionFactory();
using (var session = factory.OpenSession())
{
// do something with the session
}
}

//******************************打开一个会话对数据库进行增操作****************************//
private void btnAddCategory_Click(object sender,RoutedEventArgs e)
{
var factory = CreateSessionFactory();
using (var session = factory.OpenSession())
{
var category = new Category
{
Name = txtCategoryName.Text,
Description = txtCategoryDescription.Text
};
session.Save(category);
}
}

//**************************打开会话对数据库进行查操作************************************//
private void btnLoadCategories_Click(object sender, RoutedEventArgs e)
{
var factory = CreateSessionFactory();
using (var session = factory.OpenSession())
{
var categories = session.Query<Category>()
.OrderBy(c => c.Name).ToList();
lstCategories.ItemsSource = categories;
lstCategories.DisplayMemberPath = "Name";
}
}
#endregion

3、小结

通过简单的实例操作,学习了NHibernate 对SQLite操作的简单流程,具体如下:

1、定义一个模型(Model)

2、定义数据库的工作方式(DataBase Schema)

3、映射模型到数据库中(Mapping the Model to the DataBase)(这是否就是ORM的精髓呢?望大神给我解答下)

4、会话的使用和事务的启用(Sessions and Transactions)

5、测试(Test)

如果有理解的不对,请大神指点。

时间: 2024-10-05 19:30:54

NHibernate+SQLite 学习笔记(二)+使用FLuent NHibernate 建立会话工厂(session factory) 并对数据库进行操作(open Session)的相关文章

Sqlite学习笔记(二)&amp;&amp;性能测试

测试目标 获取SQlite的常规性能指标 测试环境 CPU:8核,Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz 内存:16G 磁盘:SSD Linux 2.6.32 SQlite最新版本3.8.11 测试场景 1)  主键查询测试 2)  主键更新测试 3)  批量导入测试 初始化 1)  测试表结构 CREATE TABLE user( id integer primary key autoincrement, c1 int, c2 varchar(1000

SQLite 学习笔记

SQLite 学习笔记. 一.SQLite 安装    访问http://www.sqlite.org/download.html下载对应的文件.    1.在 Windows 上安装 SQLite.需要下载 sqlite-shell-win32-*.zip 和 sqlite-dll-win32-*.zip 压缩文件.        创建文件夹 C:\sqlite,并在此文件夹下解压上面两个压缩文件,将得到 sqlite3.def.sqlite3.dll 和 sqlite3.exe 文件.   

sqlite学习笔记7:C/C++中使用sqlite之打开数据库

数据库的基本内容前面都已经说得差不多了,接下看看怎样在C语言中使用sqlite. 一 接口 sqlite3_open(const char *filename, sqlite3 **ppDb) 打开数据库,如果数据库不存在则新建一个数据库,并打开 sqlite3_close(sqlite3*) 关闭数据库,如果关闭之前还存在没有执行完的语句,将会返回SQLITE_BUSY 二 实例 1 目录结构 Projects{ main.c// 代码所在文件 sqlite{// 官网下载下来的sqlite压

sqlite学习笔记6:更新表数据

一 条件判断 在SQL中条件判断使用where,相当于其他变成语言中的if,基本用法如: SELECT column1, column2, columnN FROM table_name WHERE [condition] 另外,SQL支持数学运算,逻辑运算,位于运算等等,均可放在WHERE子句中. 二 更新表 基本语法如下: UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE

sqlite学习笔记4:表的创建和删除

前面做了那么多不就是为了数据弄几张表么,接下来看看怎么新建表. 一 新建表 基本语法如下: CREATE TABLE database_name.table_name( column1 datatype PRIMARY KEY(one or more columns), column2 datatype, column3 datatype, ..... columnN datatype, ); 其中database_name为你的数据库名,table_name当然是表名啦,columnN为列明,

sqlite学习笔记7:C语言中使用sqlite之打开数据库

数据库的基本内容前面都已经说得差点儿相同了.接下看看如何在C语言中使用sqlite. 一 接口 sqlite3_open(const char *filename, sqlite3 **ppDb) 打开数据库,假设数据库不存在则新建一个数据库,并打开 sqlite3_close(sqlite3*) 关闭数据库.假设关闭之前还存在没有运行完的语句,将会返回SQLITE_BUSY 二 实例 1 文件夹结构 Projects{ main.c// 代码所在文件 sqlite{// 官网下载下来的sqli

sqlite学习笔记3:附加数据库和分离数据库

在前面说了如果创建一个数据库,接下来我们需要操作数据库: 但是sqlite3命令一次只能操作一个数据库,如果当前路径下有多个数据库该怎么办呢?这就需要用到附加数据库. 一  关联数据库 附加数据库实际上就是告诉sqlite3,你写的SQL语句是操作的哪一个数据库.具体如何操作呢? 基本语法如下: ATTACH DATABASE 'DatabaseName' As 'Alias-Name'; *sqlite3中的语句都需要以分好结束 使用上面的命名,如果数据库存在,将会被关联到'Alias-Nam

sqlite学习笔记8:C语言中使用sqlite之创建表

前面已经说了如何打开和关闭数据库,这次要说得是如何执行SQL语句,来创建一张表. 要用的的函数: sqlite3_exec(sqlite3* db, const char *sql, sqlite_callback callback, void *data, char **errmsg) 参数: db:已经打开的数据库实例 sql:SQL语句,是一个字符串 callback:是一个回调函数 data:做为回调函数的第一个参数 errmsg:用于带回错误信息 该回调函数有两种返回值类型. 1.返回

Caliburn.Micro学习笔记(二)----Actions

Caliburn.Micro学习笔记(二)----Actions 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions,看一下Caliburn.Micro给我们提供了多强大的支持 我们还是从做例子开始 demo的源码下载在文章的最后 例子1.无参数方法调用 点击button把textBox输入的文本弹出来 如果textbox里没有文本button不可点,看一下效果图 看一下前台代码 <Stac