0

我是带有实体框架的 Asp.net MVC 3 的新手。

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

我的问题是我必须如何以及在哪里防止重复记录?我的“名字”字段是唯一的。那么,当用户从表单中添加一条记录时,我如何控制这条记录不存在呢?

提前谢谢了。

4

4 回答 4

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();
    }
}

有更好的方法来构建这段代码,使用稍微高级的设计模式,但这应该是一个开始。

通常,您希望避免抛出异常,因为它通常比检查错误输入要慢。

于 2012-10-27T21:22:18.133 回答
0
if(ModelState.IsValid)
{
    if(db.A.Any(ac=>ac.Name.Equals(a.Name)))   
    {
          return;
    }
    else
    {
        db.A.Add(a);
        db.SaveChange();
    }
}
于 2016-11-30T05:20:34.687 回答
0

本教程完全解释了避免在 asp.net mvc 中插入重复记录,在本教程中,我们使用 jquery 验证插件来限制重复的用户名阅读更多http://www.dotnetqueries.com/Article/137/prevent-duplicate-values -使用-jquery-validation

在此处输入图像描述

于 2017-08-16T08:04:02.503 回答
-2

这是一个简单的例子:

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

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

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

bool isSaved = Context.SaveChanges() > 0;

并取决于 isSaved 是 true 还是 false,你可以做你想做的事。

记录异常是可取的,但我建议你通过覆盖SaveChanges()你的上下文来做到这一点。

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

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

在执行 top(2) 查询时使用SingleOrDefault(),如果有多个结果,则会引发异常。

返回序列的唯一元素,如果序列为空,则返回默认值;如果序列中有多个元素,此方法将引发异常。

于 2012-10-27T21:01:55.200 回答