Почему это вызывает исключение NULL-значения?

По какой-то причине я получаю следующую ошибку на 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. 

Код контроллера:

[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() метод?

1 ответ

Решение

Я знаю это исключение только из одной ситуации, а именно: UserId не является столбцом идентификации в вашей базе данных, но в модели EF соответствующее свойство помечено как таковое, что означает, что оно либо явно связано с DatabaseGeneratedOption.Identity или косвенно по соглашениям.

Проблема в том, что в этом случае EF не будет отправлять значение свойства в БД (независимо от того, установлено оно или нет), поскольку предполагает, что БД выполнит работу по созданию значения столбца. Но Db не делает, следовательно, исключение.

Просто предположение.

Редактировать:

Чтобы решить проблему, вы должны отметить UserId с DatabaseGeneratedOption.None,

Другие вопросы по тегам