我是使用Entity Framework的Asp.net MVC 3的新手。
我按照教程制作了一个简单的程序,用于添加/编辑和删除SQL数据库中的记录。
我的问题是我必须如何以及在何处阻止重复记录?我将“firstName”字段作为唯一字段。那么,当用户从表单添加记录时,如何控制该记录不存在?
非常感谢提前。
答案 0 :(得分:0)
您可以编写类似下面的内容来捕获传入数据的已知问题,但最终会遇到一个例外情况:数据遇到一个不常见的问题:
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();
}
}
使用更高级的设计模式,有更好的方法来构建此代码,但这应该是一个开始。
通常,您希望避免抛出异常,因为通常它比检查错误输入要慢。
答案 1 :(得分:0)
if(ModelState.IsValid)
{
if(db.A.Any(ac=>ac.Name.Equals(a.Name)))
{
return;
}
else
{
db.A.Add(a);
db.SaveChange();
}
}
答案 2 :(得分:0)
本教程完全解释了为避免在asp.net mvc中插入重复记录,在本教程中我们使用jquery validaton插件来限制重复的用户名阅读更多http://www.dotnetqueries.com/Article/137/prevent-duplicate-values-using-jquery-validation
答案 3 :(得分:-2)
这是一个简单的例子:
//在这里将实体标记为已添加
Context.Entry(yourPersonEntity).State = System.Data.EntityState.Added;
//这里返回true或false是插入成功
bool isSaved = Context.SaveChanges() > 0;
并且根据isSaved是真还是假,你做你想做的事。
最好记录异常,但我建议您通过覆盖上下文的SaveChanges()
来执行此操作。
也不要使用FirsOrDefault()
,因为它只返回第一个值,并不保证该值是唯一的。
返回序列的第一个元素,如果不是,则返回默认值 找到了元素。
使用SingleOrDefault()
,因为它会执行top(2)查询,如果有多个结果,则会抛出异常。
返回序列的唯一元素,如果是,则返回默认值 序列是空的;如果有更多,此方法会抛出异常 比序列中的一个元素。