Photon Server初识(三) ---ORM映射改进

一:新建一些管理类,

二、实现每个管理类

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

 1 using NHibernate;
 2 using NHibernate.Cfg;
 3
 4 namespace Nbibernate
 5 {
 6     public class NHibernateHelper
 7     {
 8         private static ISessionFactory _sessionFactory;
 9
10         private static ISessionFactory SessionFactory
11         {
12             get
13             {
14                 if (_sessionFactory == null)
15                 {
16                     var config = new Configuration();
17                     config.Configure(); //解析nhibernate.cfg配置文件
18                     config.AddAssembly("Nbibernate"); //解析 映射文件
19
20                     _sessionFactory = config.BuildSessionFactory();
21                 }
22
23                 return _sessionFactory;
24             }
25         }
26
27         public static ISession OpenSession()
28         {
29             ////打开一个跟数据库的回话
30             return SessionFactory.OpenSession();
31         }
32     }
33 }

  

  (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[0];

                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 = 100};
            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 = 8, Name = "kokoko", Age = 100, Title = "okoko"};
            manager.Update(msg); //更新,必须指定ID

            DbModel msgrm = new DbModel() { Id = 1};
            manager.Remove(msgrm);  //删除
        }
    }
}        

 (3)查询

namespace Nbibernate
{
    internal class Program
    {
        public static void Main(string[] args)
        {
        IDbManager manager = new DbManager();

            //按照主键ID查询
            DbModel msg = manager.GetById(2);
            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",100);
            Console.WriteLine(sit);
        }
    }
}        

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

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

原文地址:https://www.cnblogs.com/cj8988/p/11661877.html

时间: 2024-11-14 11:03:07

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

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

现在开始实现ORM的主体模块,首先需要在项目中新建一个类,命名为DbAccess,然后在项目的引用中添加两个dll,分别是MySql.Data.dll和System.Data.SQLite.dll,这两个dll都可以在对应的数据库官网上下载到,为了方便我这里也提供一个下载地址.添加好dll后需要在DbAccess中添加几个名空间,具体代码如下: using System; using System.Collections; using System.Collections.Generic; us

点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)

下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:MySQL数据库 (建表规约.索引规约.SQL语句.ORM映射) 本文难度系数为三星(★★★) 本文为第四篇 第一篇 点评阿里JAVA手册之编程规约(命名风格.常量定义.代码风格.控制语句.注释规约) 第二篇 点评阿里JAVA手册之编程规约(OOP 规约 .集合处理 .并发处理 .其他) 第三篇 点评阿里JAVA手册之异常日志(异常处理 日志规约 ) 第四篇

转:C#制作ORM映射学习笔记一 自定义Attribute类

之前在做unity项目时发现只能用odbc连接数据库,感觉非常的麻烦,因为之前做web开发的时候用惯了ORM映射,所以我想在unity中也用一下ORM(虽然我知道出于性能的考虑这样做事不好的,不过自己的小项目吗管他的,自己爽就行了).不过现在世面上的ORM映射基本都是为web项目设计的,与unity项目很难契合,所以我决定自己做一个简易的ORM映射.虽然想的很美但是实际做起来才发现还是挺复杂的,所以我在这里记录一下这次的开发过程,防止以后遗忘. 今天先记录一下如何通过自定义attribute类实

Photon Server LoadBalancing搭建

准备:申请3台Windows虚拟机. 3台虚拟机上都部署上Photon Server. 一.主虚拟机上部署MasterServer. (1)在第一台虚拟机中,部署的Photon Server目目录下找到Loadbalancing目录,删除GameServer文件夹 (2)修改Master的配置文件.Photon.LoadBalancing.dll.config (在目录Master/bin/中) (3)修改PhotonServer.config 配置文件.(在目录 bin_Win64/ 中) 删

nagios介绍及Server安装(三)

client端服务安装: 监控方式随便,但是常见的有下面几种: 1.使用nagios自带插件监控,也就是nrpe方式:不足之处每台client都需要安装,推荐将编译包进行rpmind,搭建yum源,执行yum即可: 2.snmp方式,好处client端只需要开启snmp服务即可,不足之处每个厂商的oid不尽相同,给监控脚本开发带来不便,推荐开发一个高效率的万能agent: 3.ssh方式,好处监控脚本易于编写,不足频繁执行会对客户端增加不必要的负担. 我这边的Client和Server端系统一样

Arduino 温度传感器NTC温度AD对应值映射改进

上次做的NTC测温方案,功能是实现了,但是有些不足的地方,例如AD值飘得厉害,温度值也就飘,尝试调整线性函数和映射AD值,从2^10位降到8位.7位测试其稳定性. NTC选型,除了上次用的环氧树脂型的,这次选用不锈钢或铜镀锌外壳,和小黑头插件这两种做测试. #define Pot A2 //NTC引脚命名 int PotBufferA = 0; //AD读取数据缓存变量 int PotBufferB = 0; //AD读取数据缓存变量 int PotBufferC = 0; //AD读取数据缓存

SQL Server之 (三) 分组 类型转换函数 插入多条数据 字符串函数

SQL Server之 (三)  分组 类型转换函数  插入多条数据  字符串函数 自己学习笔记,转载请注明出处,谢谢!---酸菜 1.SQL 数据分组----Group by /Having  ①有一学生信息表:StuID/StuName/StuAge/StuGender/StuClassID; 求每个班级的ID和对应人数:select StuClassID 班级ID,count(*) 班级人数  from StuInfo group by StuClassID ; 求所有同学中男女同学对应人

What is Photon Server?

http://blog.csdn.net/menuconfig/article/details/8215033 Photon Server是一套套裝的遊戲伺服器,以往開發線上遊戲都必需自行花費大筆的研發資金和人力先從研發遊戲引擎和伺服器開始,後來慢慢的遊戲引擎開始走向套裝化,研發人員有許多現成的遊戲引擎可以選擇,像是unreal或是unity等等,接著,遊戲伺服器也開始朝套裝發展,市面上常見的套裝Game Server有 smart fox server . electro server 5 .

SpringMVC实战(三种映射处理器)

1.前言 上一篇博客,简单的介绍了一下SpringMVC的基础知识,这篇博客来说一下SpringMVC中的几种映射处理器机制. 2.三种映射处理器 2.1 BeanNameUrlHandlerMapping  (默认) 在上一篇实例中,我们通过在springmvc-servlet.xml中就是通过这个默认的映射机制,来找到具体的处理器的请求.这通常是默认设置,然后通过Bean的名称,就可以找到相应的控制器信息. <?xml version="1.0" encoding="