我是一個初學者。
程式的客戶端和服務器是可以連接的。這里只是部分程式。其它部分可以對資料庫操作的。
這部分程式我認為是資料庫表的主鍵導致的,但是我沒有解決辦法,求救于各位大神。
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
uj5u.com熱心網友回復:
映射出了問題轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/53394.html
標籤:Unity3D
上一篇:cocos2d-x v3.16在Windows平臺使用vs2017搭建開發環境的問題
下一篇:一文帶你攻克二分查找
