Почему это вызывает исключение 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
,