• Newlife.Xcode使用


    一、引入Xcode包

    Build.tt执行

     总结:

    1、必须指定dll路径

    2、生成实体类就是Biz数据库操作类以及数据实体文件,简易实体类就是model实体模型

    二、更改将Biz实体表映射到mysql,创建控制台的

     运行控制台,则会根据XCode.Membership命名空间下的实体数据,与对应appsettings.json内数据库链接配置,创建数据表。

    三、创建分库分表

    我们将在Xcode.Membership命名空间内,dao的操作内,去创建分表

     原本生成是默认继承Entity实体的,现在新建一个基类,那个表需要分表,就可以继承,在构造函数内,判断id,获取时间创建分表

    代码如下:

        /// <summary>分表实体基类</summary>
        /// <typeparam name="TEntity"></typeparam>
        public class ShardEntity<TEntity> : Entity<TEntity> where TEntity : Entity<TEntity>, new()
        {
            /// <summary>根据时间创建分表上下文</summary>
            /// <param name="time"></param>
            /// <returns></returns>
            public static IDisposable CreateShard(DateTime time) => Meta.CreateSplit(null, $"{Meta.Table.TableName}_{time:yyyyMM}");
    
            /// <summary>根据自增创建分表上下文</summary>
            /// <param name="id"></param>
            /// <returns></returns>
            public static IDisposable CreateShard(Int64 id)
            {
                if (!Meta.Factory.Snow.TryParse(id, out var time, out _, out _)) throw new ArgumentOutOfRangeException(nameof(id), "该id未包含时间信息!");
    
                return Meta.CreateSplit(null, $"{Meta.Table.TableName}_{time:yyyyMM}");
            }
    
            /// <summary>获取分片标识,yyyyMM</summary>
            /// <param name="id"></param>
            /// <returns></returns>
            public static Int32 GetShard(Int64 id)
            {
                if (!Meta.Factory.Snow.TryParse(id, out var time, out _, out _)) return 0;
    
                return time.Year * 100 + time.Month;
            }
        }

    继承使用

    部分代码如下

            static UserOnline()
            {
                // 累加字段,生成 Update xx Set Count=Count+1234 Where xxx
                //var df = Meta.Factory.AdditionalFields;
                //df.Add(nameof(UserID));
    
                // 过滤器 UserModule、TimeModule、IPModule
                Meta.Modules.Add<TimeModule>();
                Meta.Modules.Add<IPModule>();
    
                // 自动分表策略
                Meta.ShardTableName = e => $"{Meta.Table.TableName}_{e.CreateTime:yyyyMM}";
                // 雪花Id设置
                Meta.Factory.Snow.StartTimestamp = new DateTime(2020, 1, 1);
            }
    
            /// <summary>根据id查询</summary>
            /// <param name="boxOrderId">id</param>
            /// <returns>实体列表</returns>
            public static IList<UserOnline> FindAllById(Int64 Id)
            {
                // 分表查询
                using var shard = CreateShard(Id);
                return FindAll(_.ID == Id);
            }

     则会根据,用户访问User方法,构造自动创建表

     遇到的问题

    1、表名和字段名不能是关键字 

    2、分表,第一次肯定会建立基础表的即不是按月份的那种,会创建基础表+按月的表

    3、用雪花id,可是还是生成 0000 结构的表,理由是:

    四、码神工具

    正向工程,根据现有表结构,生成xml,然后迁移到项目内,使用dao链接即可。

     内部配置文件,可以自带有问题,现粘贴

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <runtime>
        <gcServer enabled="true"/>
      </runtime>
      <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true"/>
      </appSettings>
      <connectionStrings>
        <add name="mssql" connectionString="Data Source=.;Initial Catalog=master;user=sa;password=;" providerName="System.Data.SqlClient"/>
        <add name="mssql2" connectionString="Data Source=.;Initial Catalog=master;user=sa;password=sa;" providerName="System.Data.SqlClient"/>
        <add name="mssql3" connectionString="Data Source=.;Initial Catalog=master;user=sa;password=Pass@word;" providerName="System.Data.SqlClient"/>
        <add name="mssql4" connectionString="Data Source=.;Initial Catalog=master;Integrated Security=True;" providerName="System.Data.SqlClient"/>
        <add name="Oracle" connectionString="Data Source=Tcp://127.0.0.1/ORCL;User Id=scott;Password=tiger;" providerName="System.Data.OracleClient"/>
        <add name="Oracle2" connectionString="Data Source=orc;User ID=admin;Password=admin" providerName="System.Data.OracleClient"/>
        <add name="sqlite" connectionString="Data Source=test.db;" providerName="Sqlite"/>
        <add name="MySql" connectionString="Server=139.155.42.67;Port=3306;Database=dev_order_center;Uid=root;Pwd=dc43d165383a20e3;" providerName="MySql.Data.MySqlClient"/>
        <add name="MySql2" connectionString="Server=127.0.0.1;Port=3306;Database=mysql;Uid=root;Pwd=root;" providerName="MySql.Data.MySqlClient"/>
        <add name="MySql3" connectionString="Server=127.0.0.1;Port=3306;Database=mysql;Uid=root;Pwd=Pass@word;" providerName="MySql.Data.MySqlClient"/>
        <add name="PostgreSQL" connectionString="Server=.;Database=master;Uid=root;Pwd=root;" providerName="PostgreSQL.Data.PostgreSQLClient"/>
        <add name="Access" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=~App_DataTest.mdb;Persist Security Info=False;OLE DB Services=-1" providerName="Access"/>
        <add name="SqlCe" connectionString="Data Source=test.sdf;" providerName="SqlCe"/>
      </connectionStrings>
      <System.Windows.Forms.ApplicationConfigurationSection>
        <add key="DpiAwareness" value="PerMonitorV2"/>
      </System.Windows.Forms.ApplicationConfigurationSection>
    </configuration>

    五、魔方的使用

    1、创建项目

     添加区域

    区域选项被折叠到了“新搭建基架的项目”中。
    项目上右键“添加”-“新搭建基架的项目”

     点击添加,自动创建区域目录结构如下(有两层Areas文件夹)

    这里建议区域名字不要再起Areas

    例如

     然后,配置文件配置路由以及添加区域基类

     添加基类

     代码如下:

        [DisplayName("用户管理")]
        public class UserArea : AreaBase
        {
            public UserArea() : base(nameof(UserArea).TrimEnd("Area")) { }
    
            static UserArea() => RegisterArea<UserArea>();
        }

    然后,子类查询

     代码如下:这是二级菜单

        [UserArea]
        [DisplayName("用户在线管理")]
        public class UserOnlineController : EntityController<UserOnline>
        {
            static UserOnlineController() => MenuOrder = 50;
    
            protected override IEnumerable<UserOnline> Search(Pager p)
            {
                var id = p["Id"].ToInt(-1);
    
                return UserOnline.FindAllById(id);
            }
        }

    启动运行访问 http://localhost:5000/User/UserOnline,可参考 https://www.yuque.com/smartstone/cube/install 

    如图

     只有控制器的展示,现在左边,没有菜单,这是因为魔方是iframe架构,你直接访问内部页面了,左边是没有菜单的,/admin 才会有菜单

    尝试vs2019 视图文件的区域添加以及正常视图文件添加

    我们应该添加对应view 文件,包含显示菜单 (vs2019有点改变,只能手动添加文件, 对应文件夹层,没有办法自动生成)

     或者老办法,方法内新加View,对View右击添加视图,可以自动创建视图

     如果是区域内新增则需要添加 [Area("Test")] 标识

    注意:区域名称要跟你文件夹一样 ,否则哪怕能右击跳转视图,但是运行访问进入控制器后也会报错找不到指定视图

  • 相关阅读:
    基于接口(工厂模式)三层架构的引用和访问流程
    数据库访问类小结
    是毁灭还是重生——从浏览器大战看未来软件发展
    Func,Action的介绍及其用法
    IIS发布程序后,出现“服务器应用程序不可用”的错误
    泛型委托 Action<T>和Func<T,TResult>
    IIS发布程序后,出现“服务器应用程序不可用”的错误
    利用winrar自动备份重要资料
    HDU 2795 Billboard
    HDU 1140 War on Weather
  • 原文地址:https://www.cnblogs.com/fger/p/14242272.html
Copyright © 2020-2023  润新知