ID(主キー)と名前(一意のキー)の2つのフィールドを持つSQLサーバーテーブルがあります。このテーブルから asp.net MVC のモデル オブジェクトを生成するために、linq to sql を使用しています。
モデルの検証を実行するために、部分クラスに 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");
}
}
Company を追加する前に、部分クラスの OnNameChanging メソッドで一意のキー チェックを実行するのが理想的です。
これをどのように行うべきかについてのアイデアはありますか?これまでに考えたことは、部分クラスで新しいデータベース接続を作成し、テーブルにクエリを実行することだけです。
ありがとう