我想将我的注册表格中的数据发布到我的数据库中。起初,我有一个非常常见的错误“实体类型<model>
不是当前上下文的模型的一部分” 。我解决了它,然后出现了另一个错误。所以现在出现的错误是在SaveChanges部分,它是“找不到实体密码”。我该如何解决这个问题?实体框架DbEntityValidationException - 找不到实体
这里是我的上下文的代码。
public partial class MyDbEntities : DbContext
{
public MyDbEntities()
: base("name=MyDbEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<User>().Property(u => u.Name).IsRequired().HasMaxLength(256);
modelBuilder.Entity<User>().Property(u => u.Surname).IsRequired().HasMaxLength(256);
modelBuilder.Entity<User>().Property(u => u.Email).IsRequired().HasMaxLength(200);
modelBuilder.Entity<User>().Property(u => u.password).IsRequired().HasMaxLength(100);
modelBuilder.Entity<User>().Property(u => u.address).IsRequired();
modelBuilder.Entity<User>().Property(u => u.postcode).IsRequired();
modelBuilder.Entity<User>().Property(u => u.number).IsRequired();
}
public override int SaveChanges()
{
try
{
return base.SaveChanges();
}
catch (DbEntityValidationException ex)
{
string errorMessages = string.Join("; ", ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.ErrorMessage));
throw new DbEntityValidationException(errorMessages);
}
}
public virtual DbSet<User> Users { get; set; }
}
这里是我的控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(User U)
{
using(MyDbEntities db=new MyDbEntities())
{
db.Users.Add(U);
db.SaveChanges();
ModelState.Clear();
U = null;
ViewBag.Message("Seccesfully stored");
}
return View(U);
}
的代码和模型 `
[Required]
[Display(Name = "Name")]
public string Name { get; set; }
[Required]
[Display(Name = "Surname")]
public string Surname { get; set; }
[Required]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[DataType (DataType.Password)]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[Display(Name = "Password")]
public string password { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Confirm Password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
[Required]
[Display(Name = "Address")]
public string address { get; set; }
[Required]
[Display(Name = "PostVode")]
[DataType(DataType.PostalCode)]
public string postcode { get; set; }
[Required]
[Display(Name = "Phone Number")]
public string number { get; set; }
请张贴精确的错误 – Luke
清楚,不是很容易的,因为错误是希腊文写成的,但我会翻译。它表示无法找到名称为“密码”的实体。 –
哈哈哈。好吧。那么我能想到的唯一的事情就是''''''''''''''''''''''属性上有'[Required]'属性,并且你还没有设置它,或者它没有设置在'User U'参数上正在传递给你的方法。 – Luke