ID(プライマリキー)と名前(ユニークキー)の2つのフィールドを持つSQL Serverテーブルがあります。 私はこのテーブルからasp.net MVCのモデルオブジェクトを生成するためにSQLにlinqを使用しています。 Model.IsValidプロパティとHtml.ValidationSummaryヘルパーに期待通りasp.net mvcとlinqからsqlへのユニークキーの検証?
部分クラスに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;
}
}
}
を私はIDateErrorInfoを実施してきたモデルの検証を行うためにこれが実行されます。
ただし、このコードでは、新しく作成された会社名が空白でないことを確認するだけです。また、名前が他の会社のテーブルで使用されているかどうかを確認する必要があります。
私のリポジトリで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メソッドが一意のキーチェックを実行します。
どのように私はこれを行う必要があります上の任意のアイデア?私がこれまでに持っている唯一の考えは、部分クラスに新しいデータベース接続を作成してテーブルを照会することです。あなたがそれをスライスしかし
おかげで
うん、それは動作し、reasobably清潔です。 – Cephas
誰がその新しいリポジトリメソッドを消費する予定ですか?コントローラ?今あなたのコントローラはビジネスロジックを持っています(そして今はトランザクションスクリプトではありませんか?)これをビジネス/ドメイン層/モデルに組み込むための方法はありますか? – Merritt