我是带有实体框架的 Asp.net MVC 3 的新手。
我按照教程制作了一个简单的程序,可以在 SQL 数据库中添加/编辑和删除记录。
我的问题是我必须如何以及在哪里防止重复记录?我的“名字”字段是唯一的。那么,当用户从表单中添加一条记录时,我如何控制这条记录不存在呢?
提前谢谢了。
我是带有实体框架的 Asp.net MVC 3 的新手。
我按照教程制作了一个简单的程序,可以在 SQL 数据库中添加/编辑和删除记录。
我的问题是我必须如何以及在哪里防止重复记录?我的“名字”字段是唯一的。那么,当用户从表单中添加一条记录时,我如何控制这条记录不存在呢?
提前谢谢了。
您可以编写如下内容来捕获传入数据的已知问题,并且只会在数据遇到不常见问题的情况下出现异常:
public class PersonController
{
public ActionResult Add(PersonModel model)
{
if (ModelState.IsValid /* && check whether model represents valid data */)
{
try
{
// create Person record here (this logic might throw exception)
return View("AddSuccess");
}
catch (Exception exception)
{
return View("AddError", exception);
}
}
else
{
ModelState.AddModelErrors("", "description of model error found");
}
return View();
}
}
有更好的方法来构建这段代码,使用稍微高级的设计模式,但这应该是一个开始。
通常,您希望避免抛出异常,因为它通常比检查错误输入要慢。
if(ModelState.IsValid)
{
if(db.A.Any(ac=>ac.Name.Equals(a.Name)))
{
return;
}
else
{
db.A.Add(a);
db.SaveChange();
}
}
本教程完全解释了避免在 asp.net mvc 中插入重复记录,在本教程中,我们使用 jquery 验证插件来限制重复的用户名阅读更多http://www.dotnetqueries.com/Article/137/prevent-duplicate-values -使用-jquery-validation
这是一个简单的例子:
//这里将实体标记为已添加
Context.Entry(yourPersonEntity).State = System.Data.EntityState.Added;
//这里你返回true或false是插入成功
bool isSaved = Context.SaveChanges() > 0;
并取决于 isSaved 是 true 还是 false,你可以做你想做的事。
记录异常是可取的,但我建议你通过覆盖SaveChanges()
你的上下文来做到这一点。
也不要使用FirsOrDefault()
,因为它只返回第一个值,并且不保证该值是唯一的。
返回序列的第一个元素,如果没有找到元素,则返回默认值。
在执行 top(2) 查询时使用SingleOrDefault()
,如果有多个结果,则会引发异常。
返回序列的唯一元素,如果序列为空,则返回默认值;如果序列中有多个元素,此方法将引发异常。