【发布时间】:2016-08-06 16:44:38
【问题描述】:
好的,所以这个问题在 SO 上似乎有很多不同的答案 - 但我找不到可以解决我的问题或让我清楚问题所在的副本。当我尝试插入/创建时出现问题,并且是 db.SaveChanges() 上的验证错误。首先,我在调试器中得到了一个正在验证的“模型必须有一个 id”消息。当然,首先我的 id 是一个字符串,读完之后我发现它没有意义。How to generate and auto increment Id with Entity Framework 然后,我根据上面的链接解决方案将我的 id 更改为 int 并删除了 [Key] 数据注释。我还更新了数据库。但是,id 现在显示为 0,并且我收到一个验证错误,提示“无法将值 NULL 插入到列 id 中...” 但是,如果我对 id 进行硬编码,则表会更新得很好。这是代码..任何帮助表示赞赏。 型号:
public class Model
{
//[Key]
//[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ModelId { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Description { get; set; }
[Required]
[DataType(DataType.Time)]
public DateTime OpenTime { get; set; }
[Required]
[DataType(DataType.Time)]
public DateTime CloseTime { get; set; }
//Navigation property
public virtual ICollection<OtherModel> OtherModels { get; set; }
}
控制器:
// GET: Model/Create
public ActionResult Create()
{
return View();
}
// POST: Model/Create
[HttpPost]
public ActionResult Create(Model model)
{
try
{
db.Models.Add(model);
db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View(model);
}
}
【问题讨论】:
-
你确实需要那些你已经注释掉的属性。
-
你在使用 SQL Server 吗?
-
您的数据库中的 Id 字段的名称是什么?如果它与您的模型不同,您如何映射它?
-
两者都匹配.. 例如 ModelId => ModelId
-
为什么要删除
DatabaseGenerated属性?我认为您在没有标识规范的情况下在数据库中添加了 Id 列。它甚至是主键吗?我想你在那里有一些工作要做。更改主键需要删除表并重新创建。
标签: c# asp.net-mvc entity-framework