/// <summary> /// 数据加载完成 /// </summary> /// <param name="onInserted">添加记录事件</param> /// <param name="onUpdated">更新记录事件</param> /// <param name="onDeleted">删除记录事件</param> protected static void sqlLoaded(Action <tableType> onInserted = null, AutoCSer.Sql.Cache.Table <tableType, AutoCSer.Example.OrmModel.MemberCache> .OnCacheUpdated onUpdated = null, Action <tableType> onDeleted = null) { sqlCache /**/.Loaded(onInserted, onUpdated, onDeleted, false); sqlTable.LoadMemberCache(typeof(memberCacheType)); sqlTable.WaitMemberCache(); } /// <summary> /// SQL默认缓存 /// </summary> protected static readonly AutoCSer.Sql.Cache.Whole.Event.IdentityArray <tableType, AutoCSer.Example.OrmModel.MemberCache, memberCacheType> sqlCache = sqlTable == null ? null : new AutoCSer.Sql.Cache.Whole.Event.IdentityArray <tableType, AutoCSer.Example.OrmModel.MemberCache, memberCacheType>(sqlTable); /// <summary> /// 获取数据 /// </summary> /// <param name="Id">默认自增标识</param> /// <returns></returns> [AutoCSer.Net.TcpStaticServer.RemoteKey] protected static tableType getSqlCache(int Id) { return(sqlCache[Id]); } } } } namespace AutoCSer.Example.OrmModel { [AutoCSer.Json.Serialize] [AutoCSer.Json.Parse] [AutoCSer.BinarySerialize.Serialize(IsReferenceMember = false, IsMemberMap = false)] public partial class MemberIndex { /// <summary> /// 数据库表格模型 /// </summary> /// <typeparam name="tableType">表格映射类型</typeparam> public abstract class SqlModel <tableType> : AutoCSer.Example.OrmModel.MemberIndex where tableType : SqlModel <tableType> { /// <summary> /// SQL表格操作工具 /// </summary> protected static readonly AutoCSer.Sql.Table <tableType, AutoCSer.Example.OrmModel.MemberIndex> sqlTable = AutoCSer.Sql.Table <tableType, AutoCSer.Example.OrmModel.MemberIndex> .Get(false); private static bool isSqlLoaded; /// <summary> /// 等待数据初始化完成 /// </summary> public static void WaitSqlLoaded() { if (!isSqlLoaded) { sqlTable.WaitLoad(); isSqlLoaded = true; } } /// <summary> /// 成员索引定义 /// </summary> protected static class MemberIndexs { /// <summary> /// 生成成员索引 (成员索引) /// </summary> public static readonly AutoCSer.Metadata.MemberMap <AutoCSer.Example.OrmModel.MemberIndex> .MemberIndex UpdateIndex = AutoCSer.Metadata.MemberMap <AutoCSer.Example.OrmModel.MemberIndex> .MemberIndex.Create(value => value.UpdateIndex); } } } } namespace AutoCSer.Example.OrmModel { [AutoCSer.Json.Serialize] [AutoCSer.Json.Parse] [AutoCSer.BinarySerialize.Serialize(IsReferenceMember = false, IsMemberMap = false)] public partial class NowTime { /// <summary> /// 数据库表格模型 /// </summary> /// <typeparam name="tableType">表格映射类型</typeparam> public abstract class SqlModel <tableType> : AutoCSer.Example.OrmModel.NowTime where tableType : SqlModel <tableType> { private static readonly AutoCSer.Sql.NowTime[] nowTimeArray = new AutoCSer.Sql.NowTime[1]; /// <summary> /// SQL表格操作工具 /// </summary> protected static readonly AutoCSer.Sql.Table <tableType, AutoCSer.Example.OrmModel.NowTime> sqlTable = AutoCSer.Sql.Table <tableType, AutoCSer.Example.OrmModel.NowTime> .Get(false, nowTimeArray); private static bool isSqlLoaded; /// <summary> /// 等待数据初始化完成 /// </summary> public static void WaitSqlLoaded() { if (!isSqlLoaded) { sqlTable.WaitLoad(); isSqlLoaded = true; } } /// <summary> /// 当前时间定义 /// </summary> [AutoCSer.IOS.Preserve(AllMembers = true)] protected static class NowTimes { /// <summary> /// 生成当前时间精度 当前时间 /// </summary> public static readonly AutoCSer.Sql.NowTime AppendTime = sqlTable == null ? null : new AutoCSer.Sql.NowTime(sqlTable.NowTimeMilliseconds); /// <summary> /// 初始化当前时间 /// </summary> /// <param name="values">缓存数据</param> public static void Load(System.Collections.Generic.IEnumerable <tableType> values) { foreach (tableType value in values) { AppendTime /**/.SetMaxTime(value.AppendTime); }
/// <summary> /// 数据加载完成 /// </summary> /// <param name="onInserted">添加记录事件</param> /// <param name="onUpdated">更新记录事件</param> /// <param name="onDeleted">删除记录事件</param> /// <param name="isMemberMap">是否支持成员位图</param> protected static void sqlLoaded(Action <tableType> onInserted = null, AutoCSer.Sql.Cache.Table <tableType, AutoCSer.TestCase.SqlModel.Class> .OnCacheUpdated onUpdated = null, Action <tableType> onDeleted = null, bool isMemberMap = true) { sqlStream.Set(sqlCache, isMemberMap); sqlCache /**/.Loaded(onInserted, onUpdated, onDeleted, false, false); sqlTable.LoadMemberCache(typeof(memberCacheType)); sqlTable.AddLogStreamLoadedType(SqlLogMembers._LoadCount_, new AutoCSer.Sql.LogStream.LoadedType(typeof(AutoCSer.TestCase.SqlModel.Student), 0)); sqlTable.WaitMemberCache(); } /// <summary> /// SQL默认缓存 /// </summary> protected static readonly AutoCSer.Sql.Cache.Whole.Event.IdentityArray <tableType, AutoCSer.TestCase.SqlModel.Class, memberCacheType> sqlCache = sqlTable == null ? null : new AutoCSer.Sql.Cache.Whole.Event.IdentityArray <tableType, AutoCSer.TestCase.SqlModel.Class, memberCacheType>(sqlTable); [AutoCSer.Metadata.Ignore] tableType AutoCSer.Sql.LogStream.IMemberMapValueLink <tableType> .MemberMapValueLink { get; set; } protected readonly static AutoCSer.Sql.LogStream.Log <tableType, AutoCSer.TestCase.SqlModel.Class> sqlStream = sqlTable == null ? null : new AutoCSer.Sql.LogStream.Log <tableType, AutoCSer.TestCase.SqlModel.Class>(sqlTable, 4); /// <summary> /// 日志处理 /// </summary> /// <param name="onLog"></param> [AutoCSer.Net.TcpStaticServer.KeepCallbackMethod(ParameterFlags = AutoCSer.Net.TcpServer.ParameterFlags.SerializeBox, ServerName = "DataLog", ServerTask = AutoCSer.Net.TcpServer.ServerTaskType.Synchronous)] [System.Runtime.CompilerServices.MethodImpl(AutoCSer.MethodImpl.AggressiveInlining)] protected static void onSqlLog(AutoCSer.Net.TcpServer.ServerCallback <AutoCSer.Sql.LogStream.Log <tableType, AutoCSer.TestCase.SqlModel.Class> .Data> onLog) { sqlStream.Add(onLog); } /// <summary> /// 计算字段日志流 /// </summary> [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Auto)] public struct SqlLogMembers { /// <summary> /// 数据对象 /// </summary> internal SqlModel <tableType, memberCacheType> _value_; private static readonly AutoCSer.Metadata.MemberMap <AutoCSer.TestCase.SqlModel.Class> _m4 = sqlStream.CreateMemberMap(value => value.StudentCount); /// <summary> /// 当前学生数量 (更新日志流) /// </summary> /// <param name="value"></param> [System.Runtime.CompilerServices.MethodImpl(AutoCSer.MethodImpl.AggressiveInlining)] public void StudentCount(int value) { if (!value.Equals(_value_.StudentCount)) { _value_.StudentCount = value; StudentCount(); } } /// <summary> /// 当前学生数量 (更新日志流) /// </summary> [System.Runtime.CompilerServices.MethodImpl(AutoCSer.MethodImpl.AggressiveInlining)] public void StudentCount() { sqlStream.Update((tableType)_value_, _m4); } /// <summary> /// 根据日志流计数完成类型初始化完毕 /// </summary> /// <param name="type"></param> internal static void _LoadCount_(AutoCSer.Sql.LogStream.LoadedType type) { if (type.Equals(typeof(AutoCSer.TestCase.SqlModel.Student), 0)) { sqlStream.LoadMember(4); } } } /// <summary> /// 计算字段日志流 /// </summary> [AutoCSer.Metadata.Ignore] public SqlLogMembers SqlLogMember { get { return(new SqlLogMembers { _value_ = this }); } } /// <summary> /// 计算字段访问代理 /// </summary> public struct SqlLogProxyMembers { /// <summary> /// 数据对象 /// </summary> internal SqlModel <tableType, memberCacheType> _value_; /// <summary> /// 当前学生数量 /// </summary> public int StudentCount { get { return(_value_.StudentCount); } set { _value_.StudentCount = value; } } } /// <summary> /// 计算字段日志流 /// </summary> [AutoCSer.Metadata.Ignore] public SqlLogProxyMembers SqlLogProxyMember { get { return(new SqlLogProxyMembers { _value_ = this }); } } /// <summary> /// 获取数据 /// </summary> /// <param name="Id">班级标识(默认自增)</param> /// <returns></returns> [AutoCSer.Net.TcpStaticServer.RemoteKey] [AutoCSer.Net.TcpStaticServer.Method(ParameterFlags = AutoCSer.Net.TcpServer.ParameterFlags.SerializeBox, ServerTask = AutoCSer.Net.TcpServer.ServerTaskType.Synchronous, ServerName = "DataLog")] protected static tableType getSqlCache(int Id) { return(sqlCache[Id]); } /// <summary> /// 班级 URL /// </summary> [AutoCSer.Metadata.Ignore] public AutoCSer.TestCase.SqlModel.WebPath.Class Path { get { return(new AutoCSer.TestCase.SqlModel.WebPath.Class { Id = Id }); } } } } } namespace AutoCSer.TestCase.SqlModel { [AutoCSer.JsonSerialize] [AutoCSer.JsonDeSerialize] [AutoCSer.BinarySerialize(IsReferenceMember = false)] public partial class Student { /// <summary> /// 数据库表格模型 /// </summary> /// <typeparam name="tableType">表格映射类型</typeparam> public abstract class SqlModel <tableType> : AutoCSer.TestCase.SqlModel.Student, AutoCSer.Sql.LogStream.IMemberMapValueLink <tableType> where tableType : SqlModel <tableType> { /// <summary> /// SQL表格操作工具 /// </summary> protected static readonly AutoCSer.Sql.Table <tableType, AutoCSer.TestCase.SqlModel.Student, System.String> sqlTable = AutoCSer.Sql.Table <tableType, AutoCSer.TestCase.SqlModel.Student, System.String> .Get(false); private static bool isSqlLoaded; /// <summary> /// 等待数据初始化完成 /// </summary> public static void WaitSqlLoaded() { if (!isSqlLoaded) { sqlTable.WaitLoad(); isSqlLoaded = true; } } private static bool isEventCacheLoaded; /// <summary> /// 等待数据事件缓存数据初始化完成 /// </summary> public static void WaitEventCacheLoaded() { if (!isEventCacheLoaded) { if (sqlCache == null) { throw new NullReferenceException(AutoCSer.Extensions.TypeExtension.fullName(typeof(tableType)) + ".sqlCache is null"); } isEventCacheLoaded = true; } } /// <summary> /// 数据加载完成 /// </summary> /// <param name="onInserted">添加记录事件</param> /// <param name="onUpdated">更新记录事件</param> /// <param name="onDeleted">删除记录事件</param> /// <param name="isMemberMap">是否支持成员位图</param> protected static void sqlLoaded(Action <tableType> onInserted = null, AutoCSer.Sql.Cache.Table <tableType, AutoCSer.TestCase.SqlModel.Student> .OnCacheUpdated onUpdated = null, Action <tableType> onDeleted = null, bool isMemberMap = true) { sqlStream.Set(sqlCache, isMemberMap); sqlCache /**/.Loaded(onInserted, onUpdated, onDeleted, false); sqlTable.LoadMemberCache(); }