Fluent NHibernate

宰父淳
2023-12-01

Fluent NHibernate

如何使用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”);
}
}
}

最后,我们就可以通过Session对数据库进行增删改查操作了!

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;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
    class Program
    {
        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();
        }
    }

 类似资料:

相关阅读

相关文章

相关问答