我正在尝试学习一些ASP.net MVC 3,我正面临一个非常讨厌的问题。
我有一个非常简单的代码控制器来创建消息。
[HttpPost]
public ActionResult Create(Message message)
{
if (ModelState.IsValid)
{
try
{
var db = new BooksDB();
db.Messages.InsertOnSubmit(message);
db.SubmitChanges();
return RedirectToAction("Index");
}
catch
{
return View(message);
}
}
return View(message);
}
第一个寄存器的创建正常,但主键为0!?!
当我尝试添加另一条消息时,我有一个例外:
Violation of PRIMARY KEY constraint 'PK_Messages'. Cannot insert duplicate key in object 'dbo.Messages'. The statement has been terminated.
我不明白为什么主键被强制为0 InsertOnSubmit()
。它应该自动递增。
视图是使用脚手架生成的,不会为Id字段提交任何内容。
任何想法?
答案 0 :(得分:1)
可能的原因可能是:
答案 1 :(得分:0)
您在相关Identity
字段的数据库中似乎没有id
个自动生成的值。您不仅必须将字段指定为主键,而且如果您希望自动生成值,则还必须指定该字段:
CREATE TABLE [dbo].[MyTable](
[id] [int] IDENTITY(1,1) NOT NULL,
[SomeField] [nvarchar](50) NOT NULL,
[OtherField] [nvarchar](100) NOT NULL,
CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED
(
[id] ASC
)
)
您也可以在SSMS中将字段设置为标识值