У меня есть таблица сервера sql с 2 полями, ID (первичный ключ) и Имя (уникальный ключ).
Я использую linq to sql для создания объектов модели для asp.net MVC из этой таблицы.
Для проверки модели я реализовал IDateErrorInfo в частичном классе
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;
}
}
}
Это работает, как ожидается, со свойством Model.IsValid и помощником Html.ValidationSummary.
Однако этот код просто проверяет, что у вновь созданной Компании есть имя, которое не является пустым. Мне также нужно проверить, использовалось ли имя в таблице другой компанией.
Я мог бы просто вызвать метод AddCompany в моем хранилище и перехватить исключение SQLException, но это выглядит грязно.
[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");
}
}
В идеале я хочу, чтобы метод OnNameChanging в частичном классе выполнил проверку уникального ключа перед тем, как попытаться добавить Company.
Любые идеи о том, как я должен это делать? Пока я думал только о том, чтобы создать новое соединение с базой данных в частичном классе и запросить таблицу.
Спасибо