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).将拷 ...
随机推荐
- 微信小程序之简单记账本开发记录(四)
昨天搭建了大致界面 今天需要将用到的一系列样式表配置出来并检查错误
- spring-boot 定时任务需要注意的地方
spring-boot 跑定时任务非常容易 启动类上添加两个注解基本OK @EnableScheduling @EnableAsync 当然要记录的肯定不是这里的问题了 首先, fixedDelayf ...
- 【spring源码分析】IOC容器初始化——查漏补缺(三)
前言:本文分析InitializingBean和init-method方法,其实该知识点在AbstractAutowireCapableBeanFactory#initializeBean方法中有所提 ...
- 关于springboot访问html页面讨论
一.springboot项目无法直接访问static和templates文件夹html Spring Boot 默认将 /** 所有访问映射到以下目录: classpath:/static class ...
- Postgresql - MATERIALIZED VIEW
MATERIALIZED VIEWPG 9.3 版本之后开始支持物化视图.View 视图:虚拟,不存在实际的数据,在查询视图的时候其实是对视图内的表进行查询操作. 物化视图:实际存在,将数据存成一张表 ...
- laydate V5-0-8动态设置min值
laydate通过设置min,max值来对用户输入的时间做约束 laydate v1.0版本 //日期插件 var start={ elem:"#start", format:&q ...
- vue+七牛云 截图工具
1.安装:npm install vue-cropper 2.引入:import VueCropper from 'vue-cropper' Vue.use(VueCropper) <templ ...
- Apache实现一台服务器上运行多个网站
总共有三种方法:通过不同的IP地址 通过不同的域名 通过不同的端口号 (1).通过不同的IP地址实现 例如一台CentOS7有两个IP:192.168.5.101和192.168.5.103 [roo ...
- JavaScript 模块化
当项目越来越大时,会遇到一些问题: 1.命名冲突 2.文件依赖 所有就有了javascript模块化开发概念. 模块化开发的演变: 1.函数块:最开始用全局函数将代码块包括在函数体内,然后把很多函数写 ...
- 陷门函数Trapdoor Function
陷门函数:正向计算是很容易的,但若要有效的执行反向计算则必须要知道一些secret/knowledge/trapdoor(知识?),也称为伪随机置换,可用于构造公钥密码系统. 若 f 为陷门函数,则 ...