8

何らかの理由で、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()

4

1 に答える 1

8

私はこの例外を 1 つの状況からのみ知っています。つまりUserId、データベースの ID 列ではありませんが、EF モデルでは、対応するプロパティにそのようにフラグが付けられていますDatabaseGeneratedOption.Identity

問題は、この場合、EF がプロパティ値を Db に送信しないことです (設定されているかどうかに関係なく)。これは、DB が列の値を作成する作業を行うと想定しているためです。しかし、Db はそうではないため、例外です。

推測です。

編集:

問題を解決するには、フラグUserIdを立てる必要がありますDatabaseGeneratedOption.None

于 2011-07-07T17:19:31.667 に答える