Questo in realtà non è specifico di Dapper, in quanto si riferisce a qualsiasi oggetto serializzabile XML .. ma si è verificato quando stavo memorizzando un oggetto usando Dapper.
In ogni caso, diciamo che ho una classe utente. Normalmente, farei qualcosa del genere:
class User
{
public string SIN {get; private set;}
public string DisplayName {get;set;}
public User(string sin)
{
if (string.IsNullOrWhiteSpace(sin))
throw new ArgumentException("SIN must be specified");
this.SIN = sin;
}
}
Dato che è richiesto un SIN, vorrei solo creare un costruttore con un parametro sin, e renderlo di sola lettura.
Tuttavia, con un Dapper (e probabilmente qualsiasi altro ORM), ho bisogno di fornire un costruttore senza parametri e rendere tutte le proprietà scrivibili. Quindi ora ho questo:
class User: IValidatableObject
{
public int Id { get; set; }
public string SIN { get; set; }
public string DisplayName { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
// implementation
}
}
Questo sembra .. non può davvero scegliere la parola, un cattivo odore?
A) Sto permettendo di cambiare le proprietà che non dovrebbero essere cambiate mai dopo che un oggetto è stato creato (SIN, userid)
B) Ora devo implementare IValidatableObject o qualcosa di simile per testare tali proprietà prima di aggiornarle in db.
Quindi come si fa a riguardo?