Restore the database.
恢复数据库。
This commit is contained in:
parent
cceda0bd1f
commit
56d3ae4964
|
@ -11,5 +11,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="JetBrains.Annotations" Version="2023.3.0" />
|
<PackageReference Include="JetBrains.Annotations" Version="2023.3.0" />
|
||||||
<PackageReference Include="YamlDotNet" Version="15.1.6" />
|
<PackageReference Include="YamlDotNet" Version="15.1.6" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="6.0.29" />
|
||||||
|
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.8" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -138,12 +138,6 @@ public static class Config
|
||||||
public const int HotBarSize = 9;
|
public const int HotBarSize = 9;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>UserID</para>
|
|
||||||
/// <para>用户ID</para>
|
|
||||||
/// </summary>
|
|
||||||
public const string UserId = "DefaultUser";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>Whether version isolation is enabled</para>
|
/// <para>Whether version isolation is enabled</para>
|
||||||
/// <para>是否启用版本隔离</para>
|
/// <para>是否启用版本隔离</para>
|
||||||
|
@ -322,17 +316,27 @@ public static class Config
|
||||||
if (EnableVersionIsolation())
|
if (EnableVersionIsolation())
|
||||||
{
|
{
|
||||||
return Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), CompanyName,
|
return Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), CompanyName,
|
||||||
ProjectSettings.GetSetting("application/config/name").AsString(), UserId,
|
ProjectSettings.GetSetting("application/config/name").AsString(),
|
||||||
ProjectSettings.GetSetting("application/config/version").AsString());
|
ProjectSettings.GetSetting("application/config/version").AsString());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), CompanyName,
|
return Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), CompanyName,
|
||||||
ProjectSettings.GetSetting("application/config/name").AsString(), UserId,
|
ProjectSettings.GetSetting("application/config/name").AsString(),
|
||||||
DefaultVersionName);
|
DefaultVersionName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>GetDataBaseDirectory</para>
|
||||||
|
/// <para>获取数据库文件夹</para>
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string GetDataBaseDirectory()
|
||||||
|
{
|
||||||
|
return Path.Join(GetGameDataDirectory(), "Databases");
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>GetModDataDirectory</para>
|
/// <para>GetModDataDirectory</para>
|
||||||
/// <para>获取模组文件夹</para>
|
/// <para>获取模组文件夹</para>
|
||||||
|
|
48
scripts/database/DataBaseManager.cs
Normal file
48
scripts/database/DataBaseManager.cs
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace ColdMint.scripts.database;
|
||||||
|
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>Game database manager</para>
|
||||||
|
/// <para>游戏数据库管理器</para>
|
||||||
|
/// </summary>
|
||||||
|
public class DataBaseManager
|
||||||
|
{
|
||||||
|
private static ServiceProvider? _serviceProvider;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>Initialize database</para>
|
||||||
|
/// <para>初始化数据库</para>
|
||||||
|
/// </summary>
|
||||||
|
public static void InitDataBases(string databasePath)
|
||||||
|
{
|
||||||
|
var serviceCollection = new ServiceCollection();
|
||||||
|
serviceCollection.AddDbContext<GameDbContext>(options =>
|
||||||
|
options.UseSqlite($"Data Source={Path.Join(databasePath, Config.SolutionName + ".db")}"));
|
||||||
|
_serviceProvider = serviceCollection.BuildServiceProvider();
|
||||||
|
var dataPackDbContext = GetRequiredService<GameDbContext>();
|
||||||
|
dataPackDbContext.Database.EnsureCreated();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>Get database service</para>
|
||||||
|
/// <para>获取数据库服务</para>
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static T GetRequiredService<T>() where T : notnull
|
||||||
|
{
|
||||||
|
if (_serviceProvider == null)
|
||||||
|
{
|
||||||
|
throw new NullReferenceException("service provider is null");
|
||||||
|
}
|
||||||
|
|
||||||
|
var scope = _serviceProvider.CreateScope();
|
||||||
|
return scope.ServiceProvider.GetRequiredService<T>();
|
||||||
|
}
|
||||||
|
}
|
40
scripts/database/GameDbContext.cs
Normal file
40
scripts/database/GameDbContext.cs
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
using ColdMint.scripts.database.gameDbTables;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace ColdMint.scripts.database;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>Game database</para>
|
||||||
|
/// <para>游戏数据库</para>
|
||||||
|
/// </summary>
|
||||||
|
public class GameDbContext(DbContextOptions<GameDbContext> options) : DbContext(options)
|
||||||
|
{
|
||||||
|
public DbSet<ErrorRecord> ErrorRecords { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>Async add error record</para>
|
||||||
|
/// <para>异步添加错误信息</para>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="errorRecord"></param>
|
||||||
|
public async void AddOrUpdateErrorRecordAsync(ErrorRecord errorRecord)
|
||||||
|
{
|
||||||
|
if (errorRecord.Message == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var oldErrorRecord = await ErrorRecords.FindAsync(errorRecord.Message);
|
||||||
|
if (oldErrorRecord == null)
|
||||||
|
{
|
||||||
|
ErrorRecords.Add(errorRecord);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
oldErrorRecord.Count++;
|
||||||
|
oldErrorRecord.LastDateTime = errorRecord.LastDateTime;
|
||||||
|
ErrorRecords.Update(oldErrorRecord);
|
||||||
|
}
|
||||||
|
|
||||||
|
await SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}
|
31
scripts/database/gameDbTables/ErrorRecord.cs
Normal file
31
scripts/database/gameDbTables/ErrorRecord.cs
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace ColdMint.scripts.database.gameDbTables;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>Error record</para>
|
||||||
|
/// <para>错误记录</para>
|
||||||
|
/// </summary>
|
||||||
|
public class ErrorRecord
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// <para>Message</para>
|
||||||
|
/// <para>错误消息</para>
|
||||||
|
/// </summary>
|
||||||
|
[Key]
|
||||||
|
[MaxLength(255)]
|
||||||
|
public string? Message { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>Count</para>
|
||||||
|
/// <para>出现次数</para>
|
||||||
|
/// </summary>
|
||||||
|
public int Count { get; set; } = 1;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>DateTime</para>
|
||||||
|
/// <para>时间</para>
|
||||||
|
/// </summary>
|
||||||
|
public DateTime LastDateTime { get; set; } = DateTime.Now;
|
||||||
|
}
|
|
@ -64,6 +64,7 @@ public static class LogCat
|
||||||
/// <para>日志收集器</para>
|
/// <para>日志收集器</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string LogCollector = "LogCollector";
|
public const string LogCollector = "LogCollector";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>Mod Loader</para>
|
/// <para>Mod Loader</para>
|
||||||
/// <para>模组加载器</para>
|
/// <para>模组加载器</para>
|
||||||
|
@ -237,6 +238,8 @@ public static class LogCat
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//If you need to upload logs, you can upload logs.
|
||||||
|
//如果需要上传日志,并且能够上传日志。
|
||||||
if (LogCollector.CanUploadLog && upload)
|
if (LogCollector.CanUploadLog && upload)
|
||||||
{
|
{
|
||||||
var logData = new LogData
|
var logData = new LogData
|
||||||
|
|
|
@ -3,6 +3,7 @@ using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using ColdMint.scripts.camp;
|
using ColdMint.scripts.camp;
|
||||||
using ColdMint.scripts.contribute;
|
using ColdMint.scripts.contribute;
|
||||||
|
using ColdMint.scripts.database;
|
||||||
using ColdMint.scripts.deathInfo;
|
using ColdMint.scripts.deathInfo;
|
||||||
using ColdMint.scripts.debug;
|
using ColdMint.scripts.debug;
|
||||||
using ColdMint.scripts.inventory;
|
using ColdMint.scripts.inventory;
|
||||||
|
@ -96,6 +97,13 @@ public partial class SplashScreenLoader : UiLoaderTemplate
|
||||||
Directory.CreateDirectory(dataPath);
|
Directory.CreateDirectory(dataPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var databasePath = Config.GetDataBaseDirectory();
|
||||||
|
if (!Directory.Exists(databasePath))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(databasePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
DataBaseManager.InitDataBases(databasePath);
|
||||||
//Registered camp
|
//Registered camp
|
||||||
//注册阵营
|
//注册阵营
|
||||||
var defaultCamp = new Camp(Config.CampId.Default)
|
var defaultCamp = new Camp(Config.CampId.Default)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user