Почему это вызывает исключение NULL-значения? - PullRequest
8 голосов
/ 07 июля 2011

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

8 голосов
/ 07 июля 2011

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

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

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

Edit:

Для решения проблемы необходимо пометить UserId с помощью DatabaseGeneratedOption.None.

...