Fluent NHibernate的初学者

Fluent NHibernate 帮助我们将c#类跟数据库做了映射,这里仅仅是个入门的简单实用教程

首先新建一个c#的类工程,然后右击选择管理NUget程序包,然后搜索安装Nhibernate跟FluentNhibernate插件包


首先建立一个数据库类,对应数据库表中的数据,然后新建文件夹,存放该类


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyDatabase.Model
{
    class UserScore
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual int Score { get; set; }//虚方法  映射的格式  
    }
}


然后建立映射类


using FluentNHibernate.Mapping;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyDatabase.Model.Mapping
{
    class UserScoreMapping:ClassMap<UserScore>
    {
        //si通过构造函数实现映射关系
        public UserScoreMapping() {
            Id(x=>x.Id).Column("id");//  x 是UserScoreMapping 类,指明主键,对应数据库的id(Column("id"))
            Map(x=>x.Name).Column("name");
            Map(x => x.Score).Column("score");
            Table("hiscores");

        }
    }
}


然后链接数据库初始化等操作,建立一个工厂类


using NHibernate;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
namespace MyDatabase
{
    class NhibernageHelper
    {
        private static ISessionFactory sessinFactory = null;
        //初始化
        private static void InitiallizeSessionFactory() {
            // 工厂初始化, 链接数据库等 /  此处会爆发各种bug 注意mysql。dll版本
            sessinFactory = Fluently.Configure().Database(MySQLConfiguration.Standard.ConnectionString(db=>db.Server("localhost").Database("mydb").Username("root").Password("123456")))
                .Mappings(x=>x.FluentMappings.AddFromAssemblyOf<NhibernageHelper>()).BuildSessionFactory();

        }
        private static ISessionFactory SessionFactory{

            get
            {
                if (sessinFactory == null)
                    InitiallizeSessionFactory();

                return sessinFactory;
            }
        }
        public static ISession OpenSession() {
            return SessionFactory.OpenSession();
        }
    }
}




最后实现业务逻辑,增删改查等等


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MyDatabase.Model;
namespace MyDatabase.Manager
{
    class UserScoreManager
    {
        public IList<UserScore> GetAllUser() {
            using (var session=NhibernageHelper.OpenSession()) {
                using (var transaction=session.BeginTransaction()) {
                    var userlist = session.QueryOver<UserScore>().Where(user=>user.Name=="xiaozhao"); // 查找userScore这个类对应的表的数据,user 自动创建的类
                    transaction.Commit();
                    return userlist.List();
                }

            }

        }
        public void SaveUser(UserScore user)
        {
            using (var session = NhibernageHelper.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    session.Save(user);
                    transaction.Commit();//增加
                }
            }
        }

        public void DeleteById(int id)
        {
            using (var session = NhibernageHelper.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    UserScore tu = new UserScore();
                    tu.Id = id;
                    session.Delete(tu);
                    transaction.Commit();
                }
            }
        }

        public void UpdateUser(UserScore tu)
        {
            using (var session = NhibernageHelper.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    session.Update(tu);
                    transaction.Commit();//  每次需要提交,修改
                }
            }
        }
        static void Main(string[] args) {
            UserScoreManager manager = new UserScoreManager();
            IList<UserScore>  userlist = manager.GetAllUser();
            foreach (UserScore li in userlist) {
                Console.WriteLine(li.Id);
            }
            Console.ReadKey();
        }
    }
}



工程的目录结构




运行后截图















错误问题:

Could not create the driver from NHibernate.Driver.MySqlDataDriver

解决方法:在使用Nhibernate连接Mysql时报这个错, 请把MySql.Data.dll文件手动 拷贝到xxx/工程文件目录/bin/Debug下 就可以解决这个问题了!原因是vs找不到 驱动了
错误提示:“FluentNHibernate.Cfg.FluentConfigurationException”类型的未经处理的异常在 FluentNHibernate.dll 中发生 

其他信息: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.

很不幸的是,拷贝进去还是没有任何作用,,更加不幸的是,中国的互联网都是拷贝,我查遍整个网络都是千篇一律,然后我换了个角度,直接搜索,FluentNHibernate 数据库链接不上,终于有点眉目。在知乎中得到了启示


于是我又下载了另一个版本的dll 



不负有心人。终于链接上去了  妈呀。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值