Example #1
0
        /// <summary>
        /// 根据主键获得实体对象(包含所有列值),仅支持单主键id,不存在时返回null
        /// </summary>
        /// <typeparam name="TEntity">实体类型</typeparam>
        /// <param name="p_id">主键</param>
        /// <returns>返回实体对象或null</returns>
        public static TEntity GetByID <TEntity>(object p_id)
            where TEntity : Entity
        {
            var pkName = SqliteConnectionEx.GetMapping(typeof(TEntity)).PK.Name;

            return(_db.ForEach <TEntity>(
                       $"select * from `{typeof(TEntity).Name}` where {pkName}=@id", new { id = p_id })
                   .FirstOrDefault());
        }
Example #2
0
        /// <summary>
        /// 打开Sqlite库,自动创建、同步库表结构
        /// </summary>
        public static void OpenDb()
        {
            if (_db != null)
            {
                return;
            }

            var dbName = GetDbName();

            try
            {
                var  path   = Path.Combine(Kit.DataPath, dbName + ".db");
                bool exists = File.Exists(path);
                _db = new SqliteConnectionEx("Data Source=" + path);
                _db.Open();

                // 初次运行、库表结构版本变化或文件被删除时创建库表结构
                if (Kit.Stub.SqliteDb.TryGetValue(dbName, out var dbInfo))
                {
                    path = Path.Combine(Kit.DataPath, $"{dbName}-{dbInfo.Version}.ver");
                    if (!exists || !File.Exists(path))
                    {
                        _db.InitDb(dbInfo.Tables);

                        // 删除旧版本号文件
                        foreach (var file in new DirectoryInfo(Kit.DataPath).GetFiles($"{dbName}-*.ver"))
                        {
                            try { file.Delete(); } catch { }
                        }

                        // 创建空文件,文件名是库表结构的版本号
                        File.Create(path);
                    }
                }

                SqliteDbs.All[dbName] = _db;
            }
            catch (Exception ex)
            {
                throw new Exception($"打开sqlite库[{dbName}]异常,请重新启动应用!{ex.Message}");
            }
        }
Example #3
0
 /// <summary>
 /// 获取表的主键名称
 /// </summary>
 /// <param name="p_type">实体类型</param>
 /// <returns></returns>
 public static string GetPrimaryKey(Type p_type)
 {
     return(SqliteConnectionEx.GetMapping(p_type).PK.Name);
 }