Asp.Net MVC 3可防止重复记录

时间:2012-10-27 20:42:17

标签: asp.net asp.net-mvc-3 entity-framework exception-handling crud

我是使用Entity Framework的Asp.net MVC 3的新手。

我按照教程制作了一个简单的程序,用于添加/编辑和删除SQL数据库中的记录。

我的问题是我必须如何以及在何处阻止重复记录?我将“firstName”字段作为唯一字段。那么,当用户从表单添加记录时,如何控制该记录不存在?

非常感谢提前。

4 个答案:

答案 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

enter image description here

答案 3 :(得分:-2)

这是一个简单的例子:

//在这里将实体标记为已添加

Context.Entry(yourPersonEntity).State = System.Data.EntityState.Added;

//这里返回true或false是插入成功

bool isSaved = Context.SaveChanges() > 0;

并且根据isSaved是真还是假,你做你想做的事。

最好记录异常,但我建议您通过覆盖上下文的SaveChanges()来执行此操作。

也不要使用FirsOrDefault(),因为它只返回第一个值,并不保证该值是唯一的。

  

返回序列的第一个元素,如果不是,则返回默认值   找到了元素。

使用SingleOrDefault(),因为它会执行top(2)查询,如果有多个结果,则会抛出异常。

  

返回序列的唯一元素,如果是,则返回默认值   序列是空的;如果有更多,此方法会抛出异常   比序列中的一个元素。