将数据从mvc保存到数据库

时间:2016-01-22 16:32:08

标签: sql-server asp.net-mvc database model-view-controller sql-server-2012

大家好,我有一个Mvc,我正在尝试使用localdb将用户注册到sql sever express数据库这是我得到的错误 " 类型' System.Data.Entity.ModelConfiguration.ModelValidationException'的例外情况发生在EntityFramework.dll中但未在用户代码中处理

其他信息:在模型生成期间检测到一个或多个验证错误:

AfterCareWebsite.Patient :: EntityType' Patient'没有定义键。定义此EntityType的密钥。

患者:实体类型:实体集'患者'基于类型'患者'没有定义键。"

观点              

注册

 @Html.ValidationSummary(true)

 @using (Html.BeginForm())
 {
     @Html.LabelFor(u => u.Email)<br/>
     @Html.TextBoxFor(u => u.Email)<br/>
     @Html.LabelFor(u => u.Password)<br>
     @Html.TextBoxFor(u => u.Password)<br/>
     @Html.LabelFor(u => u.F_Name)<br/>
     @Html.TextBoxFor(u => u.F_Name)<br/>
     @Html.LabelFor(u => u.L_Name)<br/>
     @Html.TextBoxFor(u => u.L_Name)<br/>
     @Html.LabelFor(u => u.Address_Line_1)<br/>
     @Html.TextBoxFor(u => u.Address_Line_1)<br/>

控制器

 public ActionResult Registration ()    {   return View() }

[HttpPost]
    public ActionResult Registration(Patient model)
    {
        if (ModelState.IsValid)
        {
            using (var db = new MainDbContext())
            {
                var encryptedPassword = CustomEncrypt.Encrypt(model.Password); /*encrypting our password  CustomLibrary*/


              //replaced with below line var Patient = db.Patient.Create();

               var patient = new Patient();
                patient.Email = model.Email;
                patient.Password = encryptedPassword;  
                patient.F_Name = model.F_Name;
                patient.L_Name = model.L_Name;
                patient.Address_Line_1 = model.Address_Line_1;
                db.Patient.Add(patient);  <--- error highlights this line

                      db.SaveChanges();
                 }
            }
        else
        {
            ModelState.AddModelError("","Error with one or more fields,Please check fields");
        }
        return View();
    }

错误突出显示此行
      var Patient = db.Patient.Create();

这是模型

       public class Patient
{
    [Required]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    //[HiddenInput(DisplayValue =false)]
    //public string ReturnUrl { get; set; }

    public string F_Name{ get; set; }
    public string L_Name { get; set; }

    public string Address_Line_1 { get; set; }
}

这是我试图将其保存到sql server http://i.imgur.com/LgUUwjS.jpg

的表格图像的链接

2 个答案:

答案 0 :(得分:2)

[编辑 - 我没看到显示表格的图片]

首先

在你解决这个问题之后,你将遇到更复杂的问题,几分钟后: - (

我很高兴你在回到编码之前阅读了一本关于MVC和EF的好书。

或者尝试在网络上提供的数千个教程之一,甚至从Visual Studio的开始页面开始。

而且......你的问题是与EntityFramework相关,而不是MVC。

解决方案

您必须在模型代码中明确显示密钥(我假设它是标识代码):

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

那就是它。您的代码将成功 INSERT 一名患者。

但是,它不适用于 UPDATING ,因为您的控制器没有提供期望的操作和ID ...

答案 1 :(得分:1)

确保您的ID字段已启用自动增量,只需更改产生错误的行,如下所示:

var patient = new Patient();

为您的患者对象提供一个新实例并更改您的变量名称。