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).将拷 ...
随机推荐
- dubbo——高可用性
一.zookeeper宕机 zookeeper注册中心宕机,还可以消费dubbo暴露的服务 健壮性: 监控中心宕掉不影响使用,只是丢失部分采样数据 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询, ...
- 关于在eclipse中Undefined attribute name (role).解决办法
方案一: 只需要在jsp表头添加一句: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c&q ...
- 代码审计-Typecho反序列化getshell
0x01 漏洞代码 install.php: <?php $config = unserialize(base64_decode(Typecho_Cookie::get('__typecho_c ...
- VUE项目开发流程
前期准备 安装npm 安装webpack\vue-cli(2.9.6版本--版本不同可能会导致以下一些目录结构以及错误解决办法不符合实际情况) 创建项目 初始化创建项目,项目名称.项目描述.拥有者等等 ...
- hive 常用参数
hive.exec.max.created.files •说明:所有hive运行的map与reduce任务可以产生的文件的和 •默认值:100000 hive.exec.dynamic.partit ...
- 'builtin_function_or_method' object has no attribute 'translate'
'builtin_function_or_method' object has no attribute 'translate' 首先这个错误的意思是:内建函数或方法对象不能转换成对应的属性. #错误 ...
- jQuery源代码学习之十——动画Animate
一.Animate模块的代码结构 // 定义了一些变量 tweeners = {}; function createFxNow() {} function createTween() {} funct ...
- spaCy 第二篇:语言模型
spaCy处理文本的过程是模块化的,当调用nlp处理文本时,spaCy首先将文本标记化以生成Doc对象,然后,依次在几个不同的组件中处理Doc,这也称为处理管道.语言模型默认的处理管道依次是:tagg ...
- Flutter移动电商实战 --(28)列表页_商品列表后台接口调试
主要调试商品列表页的接口 这个接口是最难的因为有大类.小类还有上拉加载 先配置接口 config/service_url.dart //const serviceUrl='http://test.ba ...
- Android 显示系统:SurfaceFlinger详解
一.Android系统启动 Android设备从按下开机键到桌面显示画面,大致过程如下图流程: 开机显示桌面.从桌面点击 App 图标到 Activity显示在屏幕上的过程又是怎样的呢?下面介绍And ...