用Nbear已经有3年多了.这些碰到个问题.
web应用站点的Session 改用StateServer方式后.要对存在session 对象序列化.
Nbear的实体对象序列化时有问题,之前使用过[SerializationIgnore]属性.好像只是针对xml序列化时忽略.
也试过网上说的 加属性[field:NonSerialized()].还是有出错
---------------------------------实体定义------------------------------------
/// <summary>
/// 系统用户,登录用户
/// </summary>
public interface User : Entity
{
[PrimaryKey]
[FriendKey(typeof(Person))]
Guid GID { get;set;}
EnumStatus Status { get;set;}
int iid { get;set; }
string user_id { get; set; }
string password { get; set; }
int count { get; set; }
bool online { get; set; }
DateTime? lastOnlineDT { get;set;}
DateTime? lastLoginDT { get; set; }
string email { get; set; }
string ip_address { get; set; }
string mac_address { get; set; }
string role { get; set; }
[FkReverseQuery(LazyLoad = true)]
[SerializationIgnore]
USBKEY usbKey { get;set;}
[PkReverseQuery(LazyLoad = true)]
[SerializationIgnore]
Person person { get;set;}
[FkQuery("user", LazyLoad = true)]
[SerializationIgnore]
UserMessage[] userMessages { get; set; }
[FkQuery("user", LazyLoad = true, Contained = false)]
[SerializationIgnore]
UserNotice[] userNotices { get; set; }
[Comment("区域权限")]
string localCode { get; set; }//区域权限,201400,201600等
[Comment("登录失败次数,大于5")]
int loginfailcount { get; set; }
[Comment("工资查询密码")]
string passwordPay { get; set; }
[Comment("在线KEY用于多点登录")]
string OnlineKey { get; set; }
}
=============出错信息=============
[SerializationException: 程序集“NBear.Data, Version=3.6.6.0, Culture=neutral, PublicKeyToken=f6134b09b3197389”中的类型“NBear.Data.Gateway”未标记为可序列化。]
[HttpException (0x80004005): 无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。]
加上[Serializable]属性试试:
[Serializable]
public interface User : Entity
{
}
加上后,编译都没通过
错误 1 特性“Serializable”在该声明类型中无效。它只在“class, struct, enum, delegate”声明中有效。 *\EntityDesigns\EntityDesigns.cs 38 6 EntityDesigns
实在不行.session 直接存guid ,使用cache提高点性能!