photon server 连接数据库,储存不了,也查询不了

a839398 2018-01-11 06:13:27
我是一个初学者。
程序的客户端和服务器是可以连接的。这里只是部分程序。其它部分可以对数据库操作的。
这部分程序我认为是数据库表的主键导致的,但是我没有解决办法,求救于各位大神。
public class Role
{
public virtual int Id { set; get; }//主键
public virtual string Name{ set; get; }
public virtual int Level { set; get; }
public virtual bool IsMan { set; get; }
public virtual string RolePrefabName { set; get; }
public virtual Users User { set; get; }//外键
}

class RoleMap:ClassMap<Role>
{
public RoleMap()
{
Id(x => x.Id).Column("Id");//主键
Map(x => x.Name).Column("name");
Map(x => x.Level).Column("level");
Map(x => x.IsMan).Column("isman");
Map(x => x.RolePrefabName).Column("roleprefabname");
References(x => x.User).Column("userid");//外键
Table("role");
}
}
public class RoleManager
{
private static readonly ILogger log = ExitGames.Logging.LogManager.GetCurrentClassLogger();

public List<Role> GetRolesByUser(Users user)
{
using (var session =NHibernateHelper.getSession())
{
using (var transaction =session.BeginTransaction())
{
var res = session.QueryOver<Role>().Where(x=>x.User==user);
transaction.Commit();
log.Info("res.RowCount()=" + res.RowCount());
return (List<Role>)res.List<Role>();//报错
}
}
}

public void AddRole(Role role)
{
log.Info(role.Name + "/" + role.Level + "/" + role.IsMan + "/" + role.RolePrefabName + "/" + role.User.UserName);
using (var session = NHibernateHelper.getSession())
{
using (var transaction = session.BeginTransaction())
{
session.Save(role);//报错
transaction.Commit();
}
}
}
}

class RoleHandler:HandlerBase
{
private static readonly ILogger log = ExitGames.Logging.LogManager.GetCurrentClassLogger();
RoleManager manager = null;
public RoleHandler()
{
manager=new RoleManager();
}

public override OperationResponse OnHandlerMessage(OperationRequest request, BaiLaoDaPeer peer)
{
OperationResponse response = new OperationResponse();
Dictionary<byte, object> parameters = new Dictionary<byte, object>();
SubCode subCode = ParameterTools.GetSubCode(request.Parameters);
parameters.Add((byte) ParameterCode.SubCode,subCode);

switch (subCode)
{
case SubCode.GetRole:
List<Role> roleList=manager.GetRolesByUser(peer.LoginUser);
foreach (var role1 in roleList)
{
role1.User = null;
}
ParameterTools.AddParameter(parameters,ParameterCode.RoleList, roleList,true);
break;
case SubCode.AddRole:
Role role = ParameterTools.GetParameter<Role>(request.Parameters, ParameterCode.Role, true);
role.User = peer.LoginUser;
manager.AddRole(role);
//将role通过JsonMapper添加到parameters要把role.User清空。
//因为JsonMapper解析不了,会出错,需要其他配置。
role.User = null;
ParameterTools.AddParameter(parameters,ParameterCode.Role, role,true);
break;
}
response.Parameters = parameters;
response.ReturnCode = (short)ReturnCode.Success;
return response;
}

public override OperationCode OpCode {
get {return OperationCode.Role;}
}
}

public class BaiLaoDaPeer : PeerBase
{
private static readonly ILogger log = LogManager.GetCurrentClassLogger();

public Users LoginUser { get; set; }//存储当前登录的user账号
public Role LoginRole { get; set; }
public BaiLaoDaPeer(IRpcProtocol protocol,IPhotonPeer peer):base(protocol,peer)
{}
protected override void OnDisconnect(PhotonHostRuntimeInterfaces.DisconnectReason reasonCode, string reasonDetail)
{ }
//客户端发起请求后调用这个函数来回应客户端
protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
{
HandlerBase handler = BaiLaoDaServer.Instances.getHandlers(operationRequest.OperationCode);

if (handler != null)
{
log.Info("handler from operation code is isExit:" + operationRequest.OperationCode);
OperationResponse response=handler.OnHandlerMessage(operationRequest,this);
SendOperationResponse(response,sendParameters);//向客户端发起响应
}
else {
log.Info("Can't find handler from operation code:"+ operationRequest.OperationCode);
}
}
}
//========================================================================
报错信息
2018-01-11 17:36:14,502 [16] INFO BaiLaoDaServer.BaiLaoDaPeer [(null)] - handler from operation code is isExit:3
2018-01-11 17:36:14,506 [16] INFO BaiLaoDaServer.DB.Managers.RoleManager [(null)] - sdfg/1/0/girl_stand/11ytbai
2018-01-11 17:36:14,514 [16] ERROR Photon.SocketServer.PeerBase [(null)] - NHibernate.Exceptions.GenericADOException: could not insert: [BaiLaoDaCommon.Model.Role][SQL: INSERT INTO role (name, level, isman, roleprefabname, userid) VALUES (?, ?, ?, ?, ?)] ---> MySql.Data.MySqlClient.MySqlException: Column 'userid' cannot be null
//有部分不是我写的程序报错,内部报错的
在 NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery(IDbCommand cmd)
在 NHibernate.Id.Insert.AbstractSelectingDelegate.PerformInsert(SqlCommandInfo insertSQL, ISessionImplementor session, IBinder binder)
--- 内部异常堆栈跟踪的结尾 ---

在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event)
在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event)
在 NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event)
在 NHibernate.Impl.SessionImpl.Save(Object obj)
在 BaiLaoDaServer.DB.Managers.RoleManager.AddRole(Role role) 位置 D:\PhontonServerWorkspace\BaiLaoDaServer\BaiLaoDaServer\DB\Managers\RoleManager.cs:行号 35
在 BaiLaoDaServer.Handlers.RoleHandler.OnHandlerMessage(OperationRequest request, BaiLaoDaPeer peer) 位置 D:\PhontonServerWorkspace\BaiLaoDaServer\BaiLaoDaServer\Handlers\RoleHandler.cs:行号 44
在 BaiLaoDaServer.BaiLaoDaPeer.OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters) 位置 D:\PhontonServerWorkspace\BaiLaoDaServer\BaiLaoDaServer\BaiLaoDaPeer.cs:行号 39
在 Photon.SocketServer.PeerBase.OnReceive(Byte[] data, SendParameters sendParameters) 位置 h:\svncontent\photon-socketserver-sdk_3.4\src\Photon.SocketServer\PeerBase.cs:行号 963
在 Photon.SocketServer.PeerBase.OnReceiveInternal(Byte[] data, SendParameters sendParameters, Int32 rtt, Int32 rttVariance, Int32 numFailures) 位置 h:\svncontent\photon-socketserver-sdk_3.4\src\Photon.SocketServer\PeerBase.cs:行号 749
2018-01-11 17:36:23,860 [6] INFO BaiLaoDaServer.BaiLaoDaPeer [(null)] - handler from operation code is isExit:3
2018-01-11 17:36:23,860 [6] INFO BaiLaoDaServer.DB.Managers.RoleManager [(null)] - sdfg/1/0/girl_stand/11ytbai
2018-01-11 17:36:23,870 [6] ERROR Photon.SocketServer.PeerBase [(null)] - NHibernate.Exceptions.GenericADOException: could not insert: [BaiLaoDaCommon.Model.Role][SQL: INSERT INTO role (name, level, isman, roleprefabname, userid) VALUES (?, ?, ?, ?, ?)] ---> MySql.Data.MySqlClient.MySqlException: Column 'userid' cannot be null
//有部分不是我写的程序报错,内部报错的

--- 内部异常堆栈跟踪的结尾 ---
在 NHibernate.Id.Insert.AbstractSelectingDelegate.PerformInsert(SqlCommandInfo insertSQL, ISessionImplementor session, IBinder binder)
在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event)
在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event)
在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event)
在 NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event)
在 NHibernate.Impl.SessionImpl.Save(Object obj)
在 BaiLaoDaServer.DB.Managers.RoleManager.AddRole(Role role) 位置 D:\PhontonServerWorkspace\BaiLaoDaServer\BaiLaoDaServer\DB\Managers\RoleManager.cs:行号 35
在 BaiLaoDaServer.Handlers.RoleHandler.OnHandlerMessage(OperationRequest request, BaiLaoDaPeer peer) 位置 D:\PhontonServerWorkspace\BaiLaoDaServer\BaiLaoDaServer\Handlers\RoleHandler.cs:行号 44
在 BaiLaoDaServer.BaiLaoDaPeer.OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters) 位置 D:\PhontonServerWorkspace\BaiLaoDaServer\BaiLaoDaServer\BaiLaoDaPeer.cs:行号 39
在 Photon.SocketServer.PeerBase.OnReceive(Byte[] data, SendParameters sendParameters) 位置 h:\svncontent\photon-socketserver-sdk_3.4\src\Photon.SocketServer\PeerBase.cs:行号 963
在 Photon.SocketServer.PeerBase.OnReceiveInternal(Byte[] data, SendParameters sendParameters, Int32 rtt, Int32 rttVariance, Int32 numFailures) 位置 h:\svncontent\photon-socketserver-sdk_3.4\src\Photon.SocketServer\PeerBase.cs:行号 749


...全文
477 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
a839398 2018-03-13
  • 打赏
  • 举报
回复
映射出了问题

2,537

社区成员

发帖
与我相关
我的任务
社区描述
Unity3D相关内容讨论专区
游戏unity 技术论坛(原bbs)
社区管理员
  • Unity3D
  • 芝麻粒儿
  • 「已注销」
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Unity3D社区公告:

  1. 社区致力于解决各种Unity3D相关的“疑难杂症”。
  2. 社区不允许发布与Unity3D或相关技术无关内容。
  3. 社区版主邀请各位一道为打造优秀社区不懈努力。

试试用AI创作助手写篇文章吧