一:新建一些管理类,

二、实现每个管理类

  (1)NHibernateHelper.cs 类,管理数据库连接

 using NHibernate;
using NHibernate.Cfg; namespace Nbibernate
{
public class NHibernateHelper
{
private static ISessionFactory _sessionFactory; private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var config = new Configuration();
config.Configure(); //解析nhibernate.cfg配置文件
config.AddAssembly("Nbibernate"); //解析 映射文件 _sessionFactory = config.BuildSessionFactory();
} return _sessionFactory;
}
} public static ISession OpenSession()
{
////打开一个跟数据库的回话
return SessionFactory.OpenSession();
}
}
}

  

  (2)IDManager.cs 类,定义一些接口

using System.Collections.Generic;
using Nbibernate.Model; namespace Nbibernate.Manager
{
internal interface IDbManager
{
void Add(DbModel msg);
void Update(DbModel msg);
void Remove(DbModel msg); DbModel GetById(int id);
DbModel GetByName(string name);
ICollection<DbModel> GetAllDb(); bool VerifyModel(string name, int age);
}
}

  (3)DbManager.cs 类,实现接口,实现数据库添加、修改、删除和查询(特别注意按照名字查询时有时有多个满足条件的返回)

using System.Collections.Generic;
using Nbibernate.Model;
using NHibernate.Criterion;
using NHibernate.Util; namespace Nbibernate.Manager
{
public class DbManager : IDbManager
{
public void Add(DbModel msg)
{
////session.Close();如果使用下面的using,就不用写session.Close()来释放session了,因为using会自动释放。下面的嵌套是先释放transacion,再释放session。
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
session.Save(msg);
transaction.Commit();
}
}
} public void Update(DbModel msg)
{
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
session.Update(msg);
transaction.Commit();
}
}
} public void Remove(DbModel msg)
{
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
session.Delete(msg);
transaction.Commit();
}
}
} public DbModel GetById(int id)
{
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var msg = session.Get<DbModel>(id);
transaction.Commit();
return msg;
}
}
} public DbModel GetByName(string name)
{
using (var session = NHibernateHelper.OpenSession())
{
var iCriteria = session.CreateCriteria(typeof(DbModel));
iCriteria.Add(Restrictions.Eq("Name", name)); //使用 UniqueResult 查询时,如果有多个满足的,这会报错
//DbModel msg = iCriteria.UniqueResult<DbModel>(); //使用List查询,这里取第一个返回
DbModel msg = null;
var msgArr = iCriteria.List<DbModel>();
if (msgArr.Any()) msg = msgArr[]; return msg;
}
} public ICollection<DbModel> GetAllDb()
{
using (var session = NHibernateHelper.OpenSession())
{
var msgArr = session.CreateCriteria(typeof(DbModel)).List<DbModel>(); return msgArr;
}
} public bool VerifyModel(string name, int age)
{
using (var session = NHibernateHelper.OpenSession())
{
var iCriteria = session.CreateCriteria(typeof(DbModel)); //多条件查询
iCriteria.Add(Restrictions.Eq("Name", name))
.Add(Restrictions.Eq("Age", age)); DbModel msg = null;
var msgArr = iCriteria.List<DbModel>();
if (msgArr.Any()) return true; return false;
}
}
}
}

 三、修改Program.cs 文件进行测试

  (1)、添加

namespace Nbibernate
{
internal class Program
{
public static void Main(string[] args)
{
DbModel msg = new DbModel() { Name = "gggggKddd",Title = "jttttt", Age = };
IDbManager manager = new DbManager();
manager.Add(msg);
}
}
}

  (2)、修改、删除

namespace Nbibernate
{
internal class Program
{
public static void Main(string[] args)
{
IDbManager manager = new DbManager();
DbModel msg = new DbModel() {Id = , Name = "kokoko", Age = , Title = "okoko"};
manager.Update(msg); //更新,必须指定ID DbModel msgrm = new DbModel() { Id = };
manager.Remove(msgrm); //删除
}
}
}

 (3)查询

namespace Nbibernate
{
internal class Program
{
public static void Main(string[] args)
{
       IDbManager manager = new DbManager(); //按照主键ID查询
DbModel msg = manager.GetById();
Console.WriteLine(msg.Name);
Console.WriteLine(msg.Age); //按照name查询
DbModel msgv2 = manager.GetByName("cjcjcc");
Console.WriteLine(msgv2.Id);
Console.WriteLine(msgv2.Age); //获取所有数据
ICollection<DbModel> msgArr = manager.GetAllDb();
foreach (DbModel u in msgArr)
{
Console.WriteLine(u.Id + " " + u.Name + " " + u.Age);
} //根据name和age查询,判断是否存在
bool sit = manager.VerifyModel("kokoko",);
Console.WriteLine(sit);
}
}
}

 查看数据库数据,是否操作成功

参考文档:https://blog.csdn.net/qq_40323256/article/details/82914340

Photon Server初识(三) ---ORM映射改进的更多相关文章

  1. Photon Server初识(四) --- 部署自己的服务Photon Server

    准备工作: 1.一台 window 虚拟机(本机是window也行) 2.下载SDK : https://www.photonengine.com/zh-CN/sdks#server 一:SDK介绍 ...

  2. 转:C#制作ORM映射学习笔记三 ORM映射实现

    现在开始实现ORM的主体模块,首先需要在项目中新建一个类,命名为DbAccess,然后在项目的引用中添加两个dll,分别是MySql.Data.dll和System.Data.SQLite.dll,这 ...

  3. Photon Server初识(二) ---通过NHibernate 映射数据库

    一.下载 NHibernate.dill 官网:https://nhibernate.info 或者通过NuGet下载(详情看上一节) 二.新建一个项目,并引入包 引入包 三.配置(重点) 1.配置x ...

  4. Photon Server初识(六) --- 客户端与服务端消息传递

    前一章客户端与服务端连接成功,现在需要前后端进行数据传递. 一.前端发送消息.在项目Scripts目录中新建脚本 TestSer.cs.并挂载到相机上 二.客户端发送数据给服务端.编辑客户端代码 Te ...

  5. Photon Server初识(一) ---C#链接MySql

    环境: 1.MAC电脑,JetBrains Rider编辑器 2.本地MySql5.7 (开始安装8.1发现使用 NHibernate 映射链接不上) 一.新建工程 二.引入dll包(MySQL.Da ...

  6. Photon Server初识(五) --- 客户端连接服务端

    准备:Unity开开发IDE. 一.新建Unity3D项目 导入包,在资源下新建目录 Plugins .在之前解压的SDK目录 lib中找到 Photon3Unity3D.dll,拖到新建的目前下 二 ...

  7. 同一个数据库实例,不同用户下多表创建视图,Hibernate完毕ORM映射,Spring整合,后台实现

    1.同一个数据库实例.同用户,多表创建视图 2.同一个数据库实例,不同用户下.多表创建视图 3.同一个数据库,不同数据库实例,多表创建视图 4.不同类型数据库,多表创建视图 1.同一个数据库实例.同用 ...

  8. 用dotnet core搭建web服务器(三)ORM访问数据库

    访问传统sql数据库,大家以前都是用sql语句去查询.这些年流行orm方法 ORM是对象关系映射的简拼,就是用一个对象(class)去表示数据的一行,用对象的成员去表述数据的列 dotnet 官方很早 ...

  9. Photon Server 实现注册与登录(一) --- Hibernate整合到项目中

    本系列实现目的:基于Photon Server实现注册于登录 一.拷贝Nbibernate项目的文件到MyGamerServer项目中. 二.数据库新建表,结构如下 三.修改文件名和配置 (1).将拷 ...

随机推荐

  1. 常使用的VIM命令及文件颜色代表含义

    编辑模式--->输入模式 i : insert 在光标所在处输入: a:append 在光标所在处后面输入: o:在当前光标所在行的下方打开一个新行: I:在当前光标所在行的行首输入: A:在当 ...

  2. JavaWeb_(Spring框架)Spring与JDBC

    一.用Spring中的JdbcTemplate操作数据库 在MySQL中准备一个user表,表中增加一条假数据 用Spring中的JdbcTemplate操作数据库,在JdbcTemplate中实现增 ...

  3. pwn学习日记Day17 《程序员的自我修养》读书笔记

    静态链接章小结 本章首先学习了静态链接的第一步骤,即目标文件在被链接成最终可执行文件时,输入目标文件中的各段是如何被合并到输出文件中的,链接器如何为它们分配在输出文件中的空间和地址.一旦输入段中的最终 ...

  4. Linux设备驱动程序 之 get_free_page

    get_free_page 如果模块需要分配大块的内存,使用面向页的分配会有很多优点: 分配页面可使用下面的函数: unsigned long get_zeroed_page(gfp_t gfp_ma ...

  5. 我用asp.net core 部署到docker遇到的问题

    1.怎么部署 我是用文件的形式先发布出来,然后把文件拷贝到服务器上部署到docker中去. 2.端口映射 根据查找到的资料,dockerfile 是不支持指定映射服务器端口的,只能在run的时候用-p ...

  6. linux C file format analysis

    c语言文件格式 source file file.c C source, ASCII text pretreatment 预处理文件 file.i C source, ASCII text assem ...

  7. centos7 设置 tomcat 开机自启

    1.创建文件 # vi /etc/systemd/system/tomcat.service [Unit] Description=Tomcat8540 After=syslog.target net ...

  8. SourceTree软件

      A free Git client for Windows and Mac SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端管理工具,同时也是Mer ...

  9. [oracle]oracle表在什么情况下会被锁住(转载)

    DML锁又可以分为,行锁.表锁.死锁 行锁:当事务执行数据库插入.更新.删除操作时,该事务自动获得操作表中操作行的排它锁. 表级锁:当事务获得行锁后,此事务也将自动获得该行的表锁(共享锁),以防止其它 ...

  10. python笔记5 接口类抽象类 封装 反射 设计模式 模块 :random随机数 josn shelve持久化存储

    接口类抽象类 接口类:接口类就是制定一个规则,让其他人按照我的规则去写程序. #!/usr/bin/env python from abc import ABCMeta,abstractmethod ...