出于某种原因,我在 db.SaveChanges();
处收到以下错误操作说明:
Cannot insert the value NULL into column 'UserId', table 'XXXXXXXXX_Dev.dbo.Portfolios'; column does not allow nulls. INSERT fails.
The statement has been terminated.
Controller 代码:
[HttpPost]
[Authorize]
public ActionResult Create(Portfolio portfolio)
{
if (ModelState.IsValid)
{
portfolio.UserId = (Guid)Membership.GetUser().ProviderUserKey;
db.AddToPortfolios(portfolio);
db.SaveChanges();
}
return View("MyPortfolios");
}
我已经通过调试器并确认正在填充 UserID。
更新:
我试过改变
db.AddToPortfolios(portfolio);
至 db.Portfolios.AddObject(portfolio);
但它仍然有同样的问题。Portfolios
是 ObjectSet
,我应该使用 Attach()
方法?
最佳答案
我只从一种情况知道这个异常,那就是:UserId
不是数据库中的标识列,但在 EF 模型中,相应的属性被标记为这样 - 这意味着它要么明确地归因于 DatabaseGeneratedOption.Identity
或隐含的约定。
问题在于,在这种情况下,EF 不会将属性值发送到 Db(无论是否设置),因为它假定 DB 将完成创建列值的工作。但 Db 没有,因此异常(exception)。
只是一个猜测。
编辑:
要解决此问题,您必须标记 UserId
与 DatabaseGeneratedOption.None
.
关于asp.net-mvc-3 - 为什么这会引发 NULL 值异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613032/