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
不负有心人。终于链接上去了 妈呀。。。