C# 使用.SaveChanges()保存电子邮件时出错;
当我将电子邮件留空并提交注册表时,它会将表单输入正确地保存到数据库中。但是,当我包括电子邮件前:testemail@gmail.com当db.SaveChanges时,产生验证错误;被称为 我收到的错误是: EntityFramework.dll中发生类型为“System.Data.Entity.Validation.DbEntityValidationException”的异常,但未在用户代码中处理 其他信息:一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性 控制器:C# 使用.SaveChanges()保存电子邮件时出错;,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,当我将电子邮件留空并提交注册表时,它会将表单输入正确地保存到数据库中。但是,当我包括电子邮件前:testemail@gmail.com当db.SaveChanges时,产生验证错误;被称为 我收到的错误是: EntityFramework.dll中发生类型为“System.Data.Entity.Validation.DbEntityValidationException”的异常,但未在用户代码中处理 其他信息:一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationEr
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using Mkq.Models;
namespace Mkq.Controllers
{
public class TeacherController : Controller
{
private MkqDbEntities db = new MkqDbEntities();
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register([Bind(Include="teacher_id,subscription_id,teacher_fname,teacher_lname,username,password,email,teacher_credNumber,teacher_credST")] Teacher teacher)
{
teacher.subscription_id = 1;
teacher.teacher_credNumber = null;
teacher.teacher_credST = null;
if (ModelState.IsValid)
{
db.Teachers.Add(teacher);
db.SaveChanges(); //Error occurs when submitted
return View();
}
// If we got this far, something failed, redisplay form
return View(teacher);
}
型号:
namespace Mkq.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
public partial class Teacher
{
public Teacher()
{
this.Quiz_info = new HashSet<Quiz_info>();
this.Students = new HashSet<Student>();
}
[DisplayName("Teacher ID")]
public int teacher_id { get; set; }
[DisplayName("Subscription ID")]
public int subscription_id { get; set; }
[DisplayName("First Name")]
public string teacher_fname { get; set; }
[DisplayName("Last Name")]
public string teacher_lname { get; set; }
[DisplayName("Username")]
public string username { get; set; }
[DisplayName("Password")]
public string password { get; set; }
[RegularExpression("^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$", ErrorMessage = "E-mail is not valid")]
[DisplayName("Email")]
public string email { get; set; }
[DisplayName("Credential Number")]
public string teacher_credNumber { get; set; }
[DisplayName("Credential")]
public string teacher_credST { get; set; }
public virtual ICollection<Quiz_info> Quiz_info { get; set; }
public virtual ICollection<Student> Students { get; set; }
public virtual Subscription Subscription { get; set; }
}
}
视图:
如果您提供的值大于字段,则会发生这种情况;那是我经常听到的。但是,您可以通过捕获异常并检查其错误消息列表来获取所有错误:
catch (System.Data.Entity.Validation.DbEntityValidationException ex)
{
foreach (var e in ex.EntityValidationErrors)
{
//check the ErrorMessage property
}
}
在那里放一个断点,它会给出错误
try
{
db.SaveChanges();
}
catch (DbEntityValidationException ex)
{
foreach (var entityValidationErrors in ex.EntityValidationErrors)
{
foreach (var validationError in entityValidationErrors.ValidationErrors)
{
Response.Write("Property: " + validationError.PropertyName + " Error: " + validationError.ErrorMessage);
}
}
}
response.write中的代码将为您提供属性名称和详细的错误消息。当用户输入大于数据库中字段的大小时,就会发生这种情况 向我们显示您收到的错误的详细信息。如果没有这一点,它几乎可以是任何东西。只需在db.savechanges execution同时删除[RegularExpression^[…]时复制您得到的异常,它是否会保存电子邮件地址和@Html.ValidationMessageForm=>m.email?我添加了上述错误的详细信息,并添加了一个try-catch块,该块给了我:System.Data.Entity.Validation.DbEntityValidationResultI已编辑了您的标题。请看,如果一致意见是否定的,则不应该。我添加了这段代码,它给了我:System.Data.Entity.Validation.DbEntityValida结果
try
{
db.SaveChanges();
}
catch (DbEntityValidationException ex)
{
foreach (var entityValidationErrors in ex.EntityValidationErrors)
{
foreach (var validationError in entityValidationErrors.ValidationErrors)
{
Response.Write("Property: " + validationError.PropertyName + " Error: " + validationError.ErrorMessage);
}
}
}