首页 > 数据库 >SqlSugar-C#版_SeedData(种子数据)

SqlSugar-C#版_SeedData(种子数据)

时间:2023-04-11 21:23:27浏览次数:59  
标签:string C# dllName SqlSugar new classNameSpaces dbSeedFilePath dbSeedFileDirecPat

        /// <summary>
        /// 导入种子数据
        /// 注:批量不可用(指定Entity名时功能可用,通过“classNameSpaces”批量导入时功能不可用)
        /// ① DBSeed文件使用json文件保存;
        /// ② 一张表一个DBSeed文件;
        /// ③ 文件名字与表名保持一致;
        /// </summary>
        /// <param name="dbSeedFileDirec">DB种子数据所在的的文件夹(放在程序目录下)</param>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity">指定Entity名;不指定时生成指定作用域中/默认作用域(一般指文件夹名)下所有Entity的表的数据</param>
        /// <param name="dllName">指定实体类的包名</param>
        /// <param name="classNameSpaces">指定实体类的包名</param>
        /// <exception cref="NotImplementedException"></exception>
        public void ImportDBSeed<T>(string dbSeedFileDirec, T entity = null, string dllName = "BOZHON.Repository.dll", string[] classNameSpaces = null) where T : class, new()
        {
            classNameSpaces = classNameSpaces == null ? new string[] { "Entity" } : classNameSpaces;

            var path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
            string dbSeedFileDirecPath = path + dbSeedFileDirec + @"/";
            if (!Directory.Exists(dbSeedFileDirecPath))
            {
                throw new Exception("DB数据初始化失败!在程序目录下找不到DB种子数据文件夹!");
            }

            if (entity is null)
            {
                List<Type> entitylist = new List<Type>();
                if (!string.IsNullOrWhiteSpace(dllName))
                {
                    dllName = path + dllName;
                    Assembly assembly = Assembly.LoadFrom(dllName);
                    Type[] ts = assembly.GetTypes();
                    foreach (string classNameSpace in classNameSpaces)
                    {
                        foreach (Type t in ts)
                        {
                            if (t.FullName.Contains(classNameSpace))
                            {
                                entitylist.Add(t);
                            }
                        }
                    }
                }

                foreach (Type type in entitylist)
                {
                    string dbSeedFilePath = dbSeedFileDirecPath + type.Name + ".json";

                    if (File.Exists(dbSeedFilePath))
                    {
                        Type typeList = typeof(List<>);
                        Type actualType = typeList.MakeGenericType(type);
                        dynamic obj = Activator.CreateInstance(actualType);

                        obj = JsonFileHelper.ReadjsonT<object>(dbSeedFilePath);  // 加载数据
                        //Db.Insertable(obj).ExecuteCommand();  // 未找到合适的无实体插入方法

                        throw new Exception("批量插入请使用方法ImportDBSeed2!");
                    }
                }
            }
            else
            {
                string dbSeedFilePath = dbSeedFileDirecPath + entity.GetType().Name + ".json";
                if (File.Exists(dbSeedFilePath))
                {
                    T obj = JsonFileHelper.ReadjsonT<T>(dbSeedFilePath);  // 加载数据

                    Db.Insertable(obj);
                }
            }
        }

        /// <summary>
        /// 导入种子数据-批量
        /// ① DBSeed文件使用json文件保存;
        /// ② 一张表一个DBSeed文件;
        /// ③ 文件名字与表名保持一致;
        /// </summary>
        /// <param name="dbSeedFileDirec">DB种子数据所在的的文件夹(放在程序目录下)</param>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity">指定Entity名;不指定时生成指定作用域中/默认作用域(一般指文件夹名)下所有Entity的表的数据</param>
        /// <param name="dllName">指定实体类的包名</param>
        /// <param name="classNameSpaces">指定实体类的包名</param>
        /// <exception cref="NotImplementedException"></exception>
        public void ImportDBSeed2(string dbSeedFileDirec) 
        {
            var path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
            string dbSeedFileDirecPath = path + dbSeedFileDirec + @"/";
            if (!Directory.Exists(dbSeedFileDirecPath))
            {
                throw new Exception("DB数据初始化失败!在程序目录下找不到DB种子数据文件夹!");
            }

            #region 设置DBSeed
            ImportDBSeed2<TestTable1>(dbSeedFileDirecPath);
            ImportDBSeed2<TestTable2>(dbSeedFileDirecPath);
            ImportDBSeed2<TestTable3>(dbSeedFileDirecPath);
            #endregion 设置DBSeed
        }

        /// <summary>
        /// ImportDBSeed2-导入种子数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dbSeedFileDirecPath">文件夹路径</param>
        private void ImportDBSeed2<T>(string dbSeedFileDirecPath) where T : class, new()
        {
            string dbSeedFilePath = dbSeedFileDirecPath + new T().GetType().Name + ".json";
            if (File.Exists(dbSeedFilePath))
            {
                var objs = JsonFileHelper.ReadjsonT<List<T>>(dbSeedFilePath);  // 加载数据

                Db.Insertable<T>(objs).ExecuteCommand();
            }
        }

        /// <summary>
        /// 导出种子数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dbSeedFileDirec">DB种子数据导出的文件夹(生成在程序目录下)</param>
        /// <param name="entity">指定Entity名;不指定时生成指定作用域中/默认作用域(一般指文件夹名)下所有Entity的表的数据</param>
        /// <param name="dllName">指定实体类的包名</param>
        /// <param name="classNameSpaces">指定实体类的包名</param>
        public void ExportDBSeed<T>(string dbSeedFileDirec, T entity = null, string dllName = "BOZHON.Repository.dll", string[] classNameSpaces = null) where T : class, new()
        {
            classNameSpaces = classNameSpaces == null ? new string[] { "Entity" } : classNameSpaces;

            var path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
            string dbSeedFileDirecPath = path + dbSeedFileDirec + @"/";
            if (!Directory.Exists(dbSeedFileDirecPath))
            {
                Directory.CreateDirectory(dbSeedFileDirecPath);  // 生成目录
            }

            if (entity is null)
            {
                List<Type> entitylist = new List<Type>();
                if (!string.IsNullOrWhiteSpace(dllName))
                {
                    dllName = path + dllName;
                    Assembly assembly = Assembly.LoadFrom(dllName);
                    Type[] ts = assembly.GetTypes();
                    foreach (string classNameSpace in classNameSpaces)
                    {
                        foreach (Type t in ts)
                        {
                            if (t.FullName.Contains(classNameSpace))
                            {
                                entitylist.Add(t);
                            }
                        }
                    }
                }

                foreach (Type type in entitylist)
                {
                    string dbSeedFilePath = dbSeedFileDirecPath + type.Name + ".json";

                    var seedDatas = Db.Queryable(type.Name, type.Name).ToList();

                    JsonFileHelper.WritejsonT(dbSeedFilePath, seedDatas);
                }
            }
            else
            {
                string dbSeedFilePath = dbSeedFileDirecPath + entity.GetType().Name + ".json";
                var seedDatas = Db.Queryable<T>().ToList();

                JsonFileHelper.WritejsonT(dbSeedFilePath, seedDatas);
            }
        }

详细见:SqlSugar-C#版_安装与使用教程

标签:string,C#,dllName,SqlSugar,new,classNameSpaces,dbSeedFilePath,dbSeedFileDirecPat
From: https://www.cnblogs.com/qq2806933146xiaobai/p/17307792.html

相关文章

  • Docker CLI docker compose convert常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • var exitFn: Int => Unit = (exitCode: Int) => System.exit(exitCode)解析
    varexitFn:Int=>Unit=(exitCode:Int)=>print(exitCode)上边代码看上去挺费劲的,不过后来稍有所悟,记录于此。varexitFn:Int=>Unit这里定义了一个可变函数exitFn,参数是一个Int类型的值,返回Unit类型的值,这个Unit类型和java中的void的有点像,就是不需要返回数据。那么它......
  • scala match的运用
    单个变量varclusterManager:Int=argmatch{case"yarn"=>YARNcase"yarn-client"|"yarn-cluster"=>println(s"Master${arg}isdeprecatedsince2.0."+......
  • MATLAB代码:基于列约束生成法CCG的两阶段鲁棒问题求解
    MATLAB代码:基于列约束生成法CCG的两阶段鲁棒问题求解关键词:两阶段鲁棒列约束生成法CCG算法鲁棒优化参考文档:《Solvingtwo-stagerobustoptimizationproblemsusingacolumn-and-constraintgenerationmethod》仿真平台:MATLABYALMIP+CPLEX优势:代码注释详实,适合参考学......
  • Tomcat彻底卸载干净
    1.首先直接删除原来的文件2.打开注册表 3.全局搜索Tomcat,删除对应的注册表4.之后以管理员身份打开任务管理器,输入scdeletetomcat10删除全部 ......
  • PAT Basic 1087. 有多少不同的值
    PATBasic1087.有多少不同的值1.题目描述:当自然数 \(n\) 依次取\(1、2、3、……、N\) 时,算式 \(⌊n/2⌋+⌊n/3⌋+⌊n/5⌋\) 有多少个不同的值?(注:\(⌊x⌋\) 为取整函数,表示不超过 \(x\) 的最大自然数,即 \(x\) 的整数部分。)2.输入格式:输入给出一个正整数 \(N\)(\(......
  • Docker部署rancher
    Linux环境:centos7.61.创建挂载目录并授权mkdir-p/docker_v/rancher/{rancher,log,kubelet,cni}chmod777-R/docker_v/rancher/2.最新稳定版(v2.5.16)/k8s(1.20.15)dockerpullrancher/rancher:v2.5.163.启动容器dockerrun-d--namerancher--privileged--restart=u......
  • Codeforces Round 864 (Div. 2) 题解
    A.LiHuaandMaze题目保证了两个点的哈密顿距离至少为\(2\),所以他们不会相邻。只要有点在角上答案就是\(2\),在边上但不在角上就是\(3\),否则就是\(4\)。#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_policy.hpp>#includ......
  • AtCoder Beginner Contest 297
    A-DoubleClick#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongint32_tmain(){intn,d;cin>>n>>d;vector<int>a(n);for(auto&i:a)cin>>i;for(inti=1;i<......
  • linux CentOS 7上安装Chrome浏览器
    目录linuxCentOS7上安装Chrome浏览器添加Chrome浏览器的官方存储库,使用以下命令:安装Chrome浏览器:确认Chrome浏览器是否安装成功:linuxCentOS7上安装Chrome浏览器在CentOS7上安装Chrome浏览器可以按照以下步骤操作:添加Chrome浏览器的官方存储库,使用以下命令:$sudotee/etc......