/// <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()); }
/// <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}"); } }
/// <summary> /// 获取表的主键名称 /// </summary> /// <param name="p_type">实体类型</param> /// <returns></returns> public static string GetPrimaryKey(Type p_type) { return(SqliteConnectionEx.GetMapping(p_type).PK.Name); }