コード例 #1
0
            /// <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);
                    }
コード例 #2
0
            /// <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();
            }