0

ユーザー登録後にデータベースにデータを保存したい。Account コントローラーの Registerfunctin にコードを書きました。コードは次のとおりです。

[HttpPost]
        public ActionResult Register(RegisterModel model)
        {
            if (ModelState.IsValid)
            {
                // Attempt to register the user
                MembershipCreateStatus createStatus;
                Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);

                if (createStatus == MembershipCreateStatus.Success)
                {
                    FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
                    ///My code for saving in dtabase
                            Recommend ad = new Recommend();      
                            ad.estate = 1;
                            ad.industry = 1;
                            storedb.AddToRecommends(ad);         
                            storedb.SaveChanges();
                    ///
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ModelState.AddModelError("", ErrorCodeToString(createStatus));
                }
            }


            // If we got this far, something failed, redisplay form
            return View(model);
        }

Recommend は、Estate and Industry 列の 1 に格納したいテーブルの名前です。この方法を使用して、別のコントローラーで befor を保存しましたが、すべて問題ありませんでしたが、次の例外が発生しました。

例外

誰が何が問題なのか教えてもらえますか? どうもありがとう

4

1 に答える 1

2

例外は、問題が何であるかを明確に示しています: EntitySetRecommendと型RecommendDefining Queryによって定義されています。つまり、EDMX ファイルのストア スキーマで指定された SQL クエリの結果です。これは、データベースからのビューのマッピングに似ています。つまり、ビューは読み取り専用で更新できず、データをセットに挿入できず、セットからデータを削除できません。

ただし、ストアド プロシージャを、定義クエリによって定義されたエンティティの挿入、更新、削除操作にマップすることは可能ですが、例外には、挿入操作をサポートするプロシージャが指定されていないことも示されています。

あなたはRecommend テーブルについて話しているので、問題は、Recommendセットがこのテーブルに直接マップされていない理由です。私の知る限り、定義クエリは開発者が手動で作成し、EDMX ファイルに手動で配置する必要があります。「データベースからモデルを更新」では、定義クエリは作成されません。このクエリを書いたのは誰ですか? どうやって EDMX ファイルを作成したのですか? データベース優先、モデル優先、手書きの XML、それとも...?

編集

上記の私の回答の最後の段落は正しくありません。開発者が定義クエリを手動で記述できた可能性はありますが、データベースファースト アプローチを使用する場合 (これは私が推測します)、データベース内のテーブルに主キーがない可能性が高くなります。その場合、ここでの答えが適用されます。

テーブルが PrimaryKey なしで検出された場合、それはビューとして扱われます。

ビューは、 StorageModel\EntitySet[n]\DefiningQuery要素の EDMX ファイル (XML エディターで開いて表示) に表示されます。

Recommend解決策:テーブルに主キーがあるかどうかをデータベースで確認します。キーがない場合は、追加します。

于 2012-06-17T10:51:55.273 に答える