大家好,我有一个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
的表格图像的链接答案 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();
为您的患者对象提供一个新实例并更改您的变量名称。