feat: Implementa gestione intelligente della chiave sorgente con rilevamento PK

- Aggiunge rilevamento automatico Primary Key per connessioni database
- Rimuove completamente il fallback automatico per lato sorgente
- Implementa selezione manuale obbligatoria per file e sorgenti non-DB
- Migliora UI con suggerimenti intelligenti e feedback visivo
- Aggiunge validazione multi-livello (UI, pre-transfer, runtime)
- Introduce metodo GetPrimaryKeyFieldAsync in IDatabaseManager
- Modifica GenerateSourceKey per richiedere sempre campo specifico
- Implementa controllo IsTransferButtonEnabled per validazione form

Breaking changes:
- La generazione automatica delle chiavi sorgente è stata rimossa
- Il campo chiave sorgente è ora obbligatorio quando si usa il sistema associazioni

Fixes: Risolve problema di discovery schema vuoto con selezione database
This commit is contained in:
2025-06-28 02:05:59 +02:00
parent 207d6fc845
commit 51c61eabf7
29 changed files with 2748 additions and 104 deletions
+50
View File
@@ -0,0 +1,50 @@
using CredentialManager.Data;
using CredentialManager.Services;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace TestDatabaseFix;
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("Test Database Initialization Fix");
var services = new ServiceCollection();
services.AddLogging(builder => builder.AddConsole());
// Configura il DbContext per usare SQLite
services.AddDbContext<CredentialDbContext>(options =>
options.UseSqlite("Data Source=test_credentials.db"));
services.AddScoped<DatabaseInitializer>();
var serviceProvider = services.BuildServiceProvider();
using var scope = serviceProvider.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<CredentialDbContext>();
var initializer = scope.ServiceProvider.GetRequiredService<DatabaseInitializer>();
try
{
Console.WriteLine("Inizializzando il database...");
await initializer.InitializeAsync();
Console.WriteLine("Verifica tabelle...");
var credentialsCount = await dbContext.Credentials.CountAsync();
var associationsCount = await dbContext.RecordAssociations.CountAsync();
Console.WriteLine($"Tabella Credentials: {credentialsCount} record");
Console.WriteLine($"Tabella RecordAssociations: {associationsCount} record");
Console.WriteLine("Test completato con successo!");
}
catch (Exception ex)
{
Console.WriteLine($"Errore: {ex.Message}");
Console.WriteLine($"Stack trace: {ex.StackTrace}");
}
}
}
+19
View File
@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\CredentialManager\CredentialManager.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="9.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.3" />
</ItemGroup>
</Project>