Sto creando un sito Web AspNet Core 2.1. Il mio modello di dati include una classe Patient
:
public class Patient
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
}
Ora, voglio che il mio codice applicazione gestisca rispettivamente Name e DateOfBirth come string
e DateTime
, ma nella tabella sottostante voglio che i valori di BOTH vengano memorizzati come stringa.
Qualcuno può indicarmi gli specifici attributi di annotazione dei dati o la magia dell'API di Fluent che mi consente di utilizzare una proprietà POCO (Entity class) su un tipo di colonna del database UNRELATED (ad esempio, dataOfBirth su una colonna [NVARCHAR] del database stringa, e
Una volta che ho definito correttamente la colonna del mio database, EF Core mi fornisce un punto di estensione per inserire facilmente il mio codice per tradurre tra il Tipo POCO e il tipo di colonna del database?
Perché dovrei voler fare questo (ti sento chiedere)? Perché il mio sito web memorizza informazioni sensibili e sto seguendo le linee guida GDPR e implementando uno schema di pseudonimizzazione. La tabella del database dietro la classe Patient non memorizza i dati effettivi. Piuttosto, memorizza le chiavi che identificano i dati in un database separato "vault". Il mio sito web ha un server "vault" separato con un'interfaccia API che memorizza coppie chiave / valore. L'accesso al server del vault è limitato ai chiamanti autorizzati e tutti gli accessi sono registrati.
Pertanto, desidero memorizzare le "chiavi" (stringhe) nel database del sito Web e disporre del middleware che comunica con l'API del vault per la conversione tra valori effettivi (dal vault) e le chiavi (dal database del sito Web).
Ma, ovviamente, voglio che il codice del sito web non sia a conoscenza di questi meccanismi del middleware. Il codice del sito web dovrebbe vedere le proprietà della classe POCO come membri ordinari e fortemente tipizzati. Tutte le traduzioni di tipo devono essere gestite dal middleware.
Utilizza conversioni di valore .
I convertitori di valori consentono di convertire i valori delle proprietà durante la lettura o la scrittura nel database. Questa conversione può essere da un valore all'altro dello stesso tipo (ad esempio, la crittografia delle stringhe) o da un valore di un tipo a un valore di un altro tipo (ad esempio, la conversione dei valori dell'enumerazione da e verso le stringhe nel database).
Per esempio:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Patient>(builder =>
{
builder
.Property(p => p.DateTime)
.HasConversion(new DateTimeToStringConverter());
});
}