Photon Server初识(三) ---ORM映射改进
一:新建一些管理类,

二、实现每个管理类
(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映射改进的更多相关文章
- Photon Server初识(四) --- 部署自己的服务Photon Server
准备工作: 1.一台 window 虚拟机(本机是window也行) 2.下载SDK : https://www.photonengine.com/zh-CN/sdks#server 一:SDK介绍 ...
- 转:C#制作ORM映射学习笔记三 ORM映射实现
现在开始实现ORM的主体模块,首先需要在项目中新建一个类,命名为DbAccess,然后在项目的引用中添加两个dll,分别是MySql.Data.dll和System.Data.SQLite.dll,这 ...
- Photon Server初识(二) ---通过NHibernate 映射数据库
一.下载 NHibernate.dill 官网:https://nhibernate.info 或者通过NuGet下载(详情看上一节) 二.新建一个项目,并引入包 引入包 三.配置(重点) 1.配置x ...
- Photon Server初识(六) --- 客户端与服务端消息传递
前一章客户端与服务端连接成功,现在需要前后端进行数据传递. 一.前端发送消息.在项目Scripts目录中新建脚本 TestSer.cs.并挂载到相机上 二.客户端发送数据给服务端.编辑客户端代码 Te ...
- Photon Server初识(一) ---C#链接MySql
环境: 1.MAC电脑,JetBrains Rider编辑器 2.本地MySql5.7 (开始安装8.1发现使用 NHibernate 映射链接不上) 一.新建工程 二.引入dll包(MySQL.Da ...
- Photon Server初识(五) --- 客户端连接服务端
准备:Unity开开发IDE. 一.新建Unity3D项目 导入包,在资源下新建目录 Plugins .在之前解压的SDK目录 lib中找到 Photon3Unity3D.dll,拖到新建的目前下 二 ...
- 同一个数据库实例,不同用户下多表创建视图,Hibernate完毕ORM映射,Spring整合,后台实现
1.同一个数据库实例.同用户,多表创建视图 2.同一个数据库实例,不同用户下.多表创建视图 3.同一个数据库,不同数据库实例,多表创建视图 4.不同类型数据库,多表创建视图 1.同一个数据库实例.同用 ...
- 用dotnet core搭建web服务器(三)ORM访问数据库
访问传统sql数据库,大家以前都是用sql语句去查询.这些年流行orm方法 ORM是对象关系映射的简拼,就是用一个对象(class)去表示数据的一行,用对象的成员去表述数据的列 dotnet 官方很早 ...
- Photon Server 实现注册与登录(一) --- Hibernate整合到项目中
本系列实现目的:基于Photon Server实现注册于登录 一.拷贝Nbibernate项目的文件到MyGamerServer项目中. 二.数据库新建表,结构如下 三.修改文件名和配置 (1).将拷 ...
随机推荐
- 解决Virtualbox的根分区容量不够用问题
现在Virtualbox新建一块磁盘.容量一定要比原来的大.然后执行克隆命令. 把原来的磁盘内容克隆到新磁盘上.然后重新启动电脑. 运行相关扩容命令即可. #克隆磁盘 cd C:\Program Fi ...
- 最简单的babel+webpack配置
首先先介绍一下2个重要的库:core-js 和 regenerator core-js core-js 是用于 JavaScript 的组合式标准化库,它包含 es5 (e.g: object.fre ...
- Kafka详细原理
Kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实 ...
- jsp显示当前系统时间
第一种方式: <% java.text.SimpleDateFormat simpleDateFormat = new java.text.SimpleDateFormat( "yyy ...
- python线程+队列(queue)
---恢复内容开始--- python的线程学习 用处 pocpiliang脚本的编写 函数式:调用 _thread 模块中的start_new_thread()函数来产生新线程.语法如下: _thr ...
- CentOS7.4搭建ftp服务
1.使用yum安装vsftpd yum install vsftpd -y 2.安装完成后,启动 FTP 服务: service vsftpd start 3.配置ftp权限 目前 FTP 服务登陆允 ...
- HearthBuddy Ai 调试实战2 在使用海巨人的时候,少召唤了一个图腾(费用是对的)
问题 游戏面板 8是青玉之爪13是海巨人17是恐狼前锋 64是萨满 66是圣骑士63,99,46,是微型木乃伊[其中99和46都是2血3攻,63是2血1攻]57是鱼人木乃伊 微型木乃伊 "L ...
- Flutter移动电商实战 --(31)列表页_列表切换交互制作
点击左侧的大类右边的小类也跟着变化 新建provide 要改变哪里就建哪里的provide,我们现在要改变的是右边的商品列表的数组. category_goods_list.dart 这样我们的pro ...
- Mac 上卸载node和npm
Mac 上卸载node和npm 卸载node依次在终端执行下面的脚本 sudo npm uninstall npm -gsudo rm -rf /usr/local/lib/node /usr/loc ...
- computer5 environment
luo@luo-All-Series:~/MyFile/Anaconda3$ luo@luo-All-Series:~/MyFile/Anaconda3$ luo@luo-All-Series:~/M ...