J'ai une table de serveur sql avec 2 champs, ID (clé primaire) et nom (clé unique). J'utilise linq to sql pour produire des objets de modèle pour asp.net MVC à partir de cette table.Validez les clés uniques avec asp.net mvc et linq to sql?
Pour effectuer la validation du modèle que j'ai mis IDateErrorInfo dans une classe partielle
public partial class Company : IDataErrorInfo
{
private Dictionary<string, string> _errors = new Dictionary<string,string>();
partial void OnNameChanging(string value)
{
if (value.Trim().Length == 0)
{
_errors.Add("Name", "Name is required");
return;
}
}
}
Ce fonctionne comme prévu avec la propriété Model.IsValid et aide Html.ValidationSummary.
Cependant, ce code vérifie simplement que la société nouvellement créée a un nom qui n'est pas vide. J'ai également besoin de vérifier si le nom a été utilisé par une autre société dans la table.
Je pourrais simplement appeler la méthode AddCompany sur mon dépôt et attraper le SQLException, mais cela semble sale.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude="ID")] Company companyToCreate)
{
if (!ModelState.IsValid)
{
return View();
}
//Add to the Database
try
{
_companyRepos.AddCompany(companyToCreate);
return RedirectToAction("Index");
}
catch(SQLException ex)
{
return View("do something to show the error inserting");
}
}
Idéalement je veux la méthode OnNameChanging dans la classe partielle pour effectuer le contrôle clé unique avant d'essayer d'ajouter la Société.
Des idées sur comment je devrais faire cela? La seule pensée que j'ai jusqu'à présent est de créer une nouvelle connexion de base de données dans la classe partielle et d'interroger la table.
Merci
Oui, cela fonctionne et est reasobably propre. – Cephas
Alors, qui va consommer cette nouvelle méthode de repo? Le controlle? Maintenant, votre contrôleur a une logique métier (et n'est-ce pas maintenant un script de transaction?) Y a-t-il un moyen d'incorporer cela dans la couche/le modèle métier/domaine? – Merritt