sqlsugar 查找表是否存在

一般的,就使用GetTableInfoList来获取所有表。然后对比一下就知道表是否存在了。

使用sqlsugar时,都需要创建实体类。并且添加上特性 [SugarTable]

 

 

我这边想从一开始,检测数据库中是否有这个表。但是我并不想使用(GetTableInfoList)直接列出所有的表,进行对比。

因为使用泛型会方法很多

DBContext<RoleModel>.GetInstance().CurrentDb.Insert(guest);

这时,就需要根据泛型来获取类的特性

Type type = typeof(T);
string tableName = ((SugarTable)(type.GetCustomAttributes(true)[0])).TableName;

 

type.GetCustomAttributes(true)。这里是获取所有特性。

因为类使用的特性只有SugarTable这一个,所以直接拿第一个数据就可以,再转换成SugarTable。后面获取TableName。

public bool IsExist()
{
Type type = typeof(T);
string tableName = ((SugarTable)(type.GetCustomAttributes(true)[0])).TableName;
return Db.DbMaintenance.IsAnyTable(tableName);
}

 

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Runtime.InteropServices;
using System.Text;

namespace 快递条码识别.sql
{
    public class DBContext<T> where T : class, new()
    {
        public SqlSugarClient Db;
        private static DBContext<T> mSingle = null;
        public static DBContext<T> GetInstance()
        {
            if (mSingle == null)
                mSingle = new DBContext<T>();
            return mSingle;
        }
        protected DBContext()
        {  //通过这个可以直接连接数据库
            Db = new SqlSugarClient(new ConnectionConfig()
            {
                //可以在连接字符串中设置连接池pooling=true;表示开启连接池
                //eg:min pool size=2;max poll size=4;表示最小连接池为2,最大连接池是4;默认是100
                //ConnectionString = "database='" + "BookShop" + "';Data Source = '" + "127.0.0.1" + "'; User Id = '" + "root" + "'; pwd='" + "1234" + "';charset='utf8';pooling=true",

                ConnectionString = "database='" + "package_crm" + "';Data Source = '" + "127.0.0.1" + "'; User Id = '" + "root" + "'; pwd='" + "root" + "';charset='utf8';pooling=true",
                DbType = SqlSugar.DbType.MySql,//我这里使用的是Mysql数据库
                IsAutoCloseConnection = true,//自动关闭连接
                InitKeyType = InitKeyType.Attribute
            });
            //调式代码 用来打印SQL
            //Db.Aop.OnLogExecuting = (sql, pars) =>
            //{
            //    Console.WriteLine(sql + "\r\n" +
            //        Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
            //    Console.WriteLine();
            //};
        }
        public void Dispose()
        {
            if (Db != null)
            {
                Db.Dispose();
            }
        }
        public SimpleClient<T> CurrentDb { get { return new SimpleClient<T>(Db); } }


        /// <summary>
        /// 查看表是否存在
        /// </summary>
        /// <returns></returns>
        public bool IsExist()
        {

            Type type = typeof(T);
            string tableName = ((SugarTable)(type.GetCustomAttributes(true)[0])).TableName;

            //怎么获取sqlsugar实体类中的表名
            //((SugarTable<T>)).TableName;
            return Db.DbMaintenance.IsAnyTable(tableName);
        }


        /// <summary>
        /// 获取所有
        /// </summary>
        /// <returns></returns>
        public virtual List<T> GetList()
        {
            return CurrentDb.GetList();
        }

        /// <summary>
        /// 根据表达式查询
        /// </summary>
        /// <returns></returns>
        public virtual List<T> GetList(Expression<Func<T, bool>> whereExpression)
        {
            return CurrentDb.GetList(whereExpression);
        }


        /// <summary>
        /// 根据表达式查询分页
        /// </summary>
        /// <returns></returns>
        public virtual List<T> GetPageList(Expression<Func<T, bool>> whereExpression, PageModel pageModel)
        {
            return CurrentDb.GetPageList(whereExpression, pageModel);
        }

        /// <summary>
        /// 根据表达式查询分页并排序
        /// </summary>
        /// <param name="whereExpression">it</param>
        /// <param name="pageModel"></param>
        /// <param name="orderByExpression">it=>it.id或者it=>new{it.id,it.name}</param>
        /// <param name="orderByType">OrderByType.Desc</param>
        /// <returns></returns>
        public virtual List<T> GetPageList(Expression<Func<T, bool>> whereExpression, PageModel pageModel, Expression<Func<T, object>> orderByExpression = null, OrderByType orderByType = OrderByType.Asc)
        {
            return CurrentDb.GetPageList(whereExpression, pageModel, orderByExpression, orderByType);
        }


        /// <summary>
        /// 根据主键查询
        /// </summary>
        /// <returns></returns>
        public virtual List<T> GetById(dynamic id)
        {
            return CurrentDb.GetById(id);
        }

        /// <summary>
        /// 根据主键删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Delete(dynamic id)
        {
            if (string.IsNullOrEmpty(id.ObjToString))
            {
                Console.WriteLine(string.Format("要删除的主键id不能为空值!"));
            }
            return CurrentDb.Delete(id);
        }


        /// <summary>
        /// 根据实体删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Delete(T data)
        {
            if (data == null)
            {
                Console.WriteLine(string.Format("要删除的实体对象不能为空值!"));
            }
            return CurrentDb.Delete(data);
        }

        /// <summary>
        /// 根据主键删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Delete(dynamic[] ids)
        {
            if (ids.Count() <= 0)
            {
                Console.WriteLine(string.Format("要删除的主键ids不能为空值!"));
            }
            return CurrentDb.AsDeleteable().In(ids).ExecuteCommand() > 0;
        }

        /// <summary>
        /// 根据表达式删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Delete(Expression<Func<T, bool>> whereExpression)
        {
            return CurrentDb.Delete(whereExpression);
        }


        /// <summary>
        /// 根据实体更新,实体需要有主键
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Update(T obj)
        {
            if (obj == null)
            {
                Console.WriteLine(string.Format("要更新的实体不能为空,必须带上主键!"));
            }
            return CurrentDb.Update(obj);
        }

        /// <summary>
        ///批量更新
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Update(List<T> objs)
        {
            if (objs.Count <= 0)
            {
                Console.WriteLine(string.Format("要批量更新的实体不能为空,必须带上主键!"));
            }
            return CurrentDb.UpdateRange(objs);
        }

        /// <summary>
        /// 插入
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Insert(T obj)
        {
            return CurrentDb.Insert(obj);
        }


        /// <summary>
        /// 批量
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Insert(List<T> objs)
        {
            return CurrentDb.InsertRange(objs);
        }


        //可以扩展更多方法 
    }
}

 

posted on 2023-01-24 11:39  不务正业的冯工  阅读(1910)  评论(0编辑  收藏  举报

导航