asp.net-mvc-3 - 为什么这会引发 NULL 值异常?

标签 asp.net-mvc-3 entity-framework-4 objectcontext objectset

出于某种原因,我在 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);但它仍然有同样的问题。
PortfoliosObjectSet ,我应该使用 Attach()方法?

最佳答案

我只从一种情况知道这个异常,那就是:UserId不是数据库中的标识列,但在 EF 模型中,相应的属性被标记为这样 - 这意味着它要么明确地归因于 DatabaseGeneratedOption.Identity或隐含的约定。

问题在于,在这种情况下,EF 不会将属性值发送到 Db(无论是否设置),因为它假定 DB 将完成创建列值的工作。但 Db 没有,因此异常(exception)。

只是一个猜测。

编辑:

要解决此问题,您必须标记 UserIdDatabaseGeneratedOption.None .

关于asp.net-mvc-3 - 为什么这会引发 NULL 值异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613032/

相关文章:

c# - "The ObjectContext instance has been disposed"用于非 EF 实体

c# - Facebook SDK C# -

css - 将 CSS 类添加到 Html.ActionLink

c# - 我的 linq 查询是否只提取它需要的内容或所有内容?

c# - 动态 linq 表达式查询,出现问题

c# - 如何使用 Entity Framework 自动设置 DateUpdated 列?

c# - 如何即时将 DataSet 对象转换为 ObjectContext( Entity Framework )对象?

asp.net-mvc - 如何从 Controller 中的表单集合中找到隐藏字段的值

ASP.NET MVC 3 Razor 页面中的 JavaScript

.net - 使用结构代替 EF4 属性类型的原语