我有一个带有 2 个字段的 sql server 表,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 方法在尝试添加公司之前执行唯一键检查。
关于我应该如何做到这一点的任何想法?到目前为止,我唯一的想法是在部分类中创建一个新的数据库连接并查询表。
谢谢