如何使用Fluent NHibernate。
首先在vs解决方案上右键,选择“管理NuGet程序包”
Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展。在使用Visual Studio开发基于.NET Framework的应用时,Nuget能把在项目中添加、移除和更新引用的工作变得更加快捷方便。Nuget是 ASP .NET Gallery 的一员。NuGet 是免费、开源的包管理开发工具,专注于在 .NET 应用开发过程中,简单地合并第三方的组件库。当需要分享开发的工具或是库,需要建立一个Nuget package,然后把这个package放到Nuget的站点。如果想要使用别人已经开发好的工具或是库,只需要从站点获得这个package,并且安装到自己的Visual Studio项目或是解决方案里。
NuGet能更方便地把一些dll和文件(如jquery)添加到项目中,而不需要从文件中复制拷贝。
然后在搜索栏中搜索Fluent,点击安装。
Fluent NHibernate是依托于NHibernate的,所以,安装Fluent NHibernate会自动安装NHibernate。
Fluent NHibernate只实现了NHibernate的mapping功能,其他功能还不能替代,所以我们需要使用NHibernate来创建Session来对数据库进行管理。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
namespace ArpgDatabase
{
public class NHibernateHelper
{
private static ISessionFactory sessionFactory = null;
private static void InitializeSessionFactory()
{
sessionFactory = Fluently.Configure()
.Database( MySQLConfiguration.Standard.ConnectionString(db => db
.Server( “127.0.0.1 / localhost”)
.Database( “arpgdb”)
.Username( “root”)
.Password( “root”)))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf< NHibernateHelper>())
//.ExposeConfiguration(e => e.Properties.Add(“hbm2ddl.keywords”, “none”))
.BuildSessionFactory();
}
private static ISessionFactory SessionFactory
{
get
{
if (sessionFactory == null )
InitializeSessionFactory();
return sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
}
接下来我们在数据库中创建数据,我们以MySql为例。使用Navicat For MySql进行可视化数据库管理。
我们通过Mavicat创建一个叫做arpgdb的数据库,在数据库中创建一个叫做testuser的表,表中存在四个字段:id,username,pwd和lv
然后我们就可以创建映射类以及数据类了。
//数据类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ArpgDatabase.Model
-{
class TestUser
{
public virtual int ID { get; set ; }
public virtual string Username { get; set ; }
public virtual string Password { get; set ; }
public virtual int Age { get; set ; }
}
}
//映射类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FluentNHibernate.Mapping;
namespace ArpgDatabase.Model.Mapping
{
class TestUserMap : ClassMap<TestUser >
{
public TestUserMap()
{
//1、设置ID属性为主键
//2、x表示一个TestUser的对象
Id(x => x.ID).Column( “id”);
Map(x => x.Username).Column( “username”);
Map(x => x.Password).Column( “pwd”);
Map(x => x.Age).Column( “lv”);
Table( “testuser”);
}
}
}
using ArpgDatabase;
using NHibernate;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//提供跟登录相关的数据库操作方法
class DBAccountMannger
{
public static void AddAccount(string username, string password)
{
ISession isession = NHibernateHelper.OpenSession();
Account ac = new Account();
ac.username = username;
ac.password = password;
isession.Save(ac);
}
public static Account SelectAccount(string name)
{
ISession isession = NHibernateHelper.OpenSession();
IList<Account> list = isession.QueryOver<Account>().Where(x => x.username == name).List();
if (list.Count > 0)
{
return list[0];
}
return null;
}
public static void UpdateAccount(Account newac)
{
ISession isession = NHibernateHelper.OpenSession();
using (ITransaction tran = isession.BeginTransaction())
{
Account acc = SelectAccount(newac.username);
acc.username = newac.username;
acc.password = newac.password;
isession.Update(acc);
tran.Commit();
}
}
public static void DeleteAccount(string username)
{
ISession isession = NHibernateHelper.OpenSession();
using (ITransaction tran = isession.BeginTransaction())
{
Account ac = SelectAccount(username);
isession.Delete(ac);
tran.Commit();
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
{
static void Main(string[] args)
{
//增加
//DBAccountMannger.AddAccount("123","123456");
//查询
//Account ac= DBAccountMannger.SelectAccount("123");
//Console.WriteLine(ac.username);
//Console.WriteLine(ac.password);
//修改
//DBAccountMannger.AddAccount("yi","123456");
//Account ac = new Account();
//ac.username = "yi";
//ac.password="1";
//DBAccountMannger.UpdateAccount(ac);
//Account oldac = DBAccountMannger.SelectAccount("123");
//Account newac = new Account();
//newac.username = "123456789";
//newac.password = "123456789";
//DBAccountMannger.UpdateAccount(oldac, newac);
//删除
//DBAccountMannger.DeleteAccount("1234");
Console.ReadKey();
}
}