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);
        }

推荐的是我想在房地产和行业列中存储 1 的表的名称。我用这种方式在另一个控制器中保存之前,一切都很好,但现在我得到了这个异常:

例外

谁能告诉我有什么问题?非常感谢

4

1 回答 1

2

异常很清楚问题是什么: EntitySetRecommend和类型Recommend定义查询定义。这意味着它是在 EDMX 文件的存储模式中指定的 SQL 查询的结果。这类似于从数据库映射视图,即它是只读的,不能更新它,不能向集合中插入数据,也不能从中删除数据。

虽然可以将存储过程映射到定义查询定义的实体的插入、更新、删除操作,但异常也表示没有指定任何过程来支持插入操作。

你在谈论一个Recommend table,所以问题是为什么这个Recommend集合没有直接映射到这个 table。据我所知,定义查询必须由开发人员手动编写并手动放入 EDMX 文件中。“从数据库更新模型”不会创建定义查询。谁写了这个查询?您是如何创建 EDMX 文件的?数据库优先或模型优先或手写 XML 或...?

编辑

我上面回答的最后一段是不正确的。开发人员可能已经手动编写了定义查询,但是当您使用 Database-First 方法(我假设)时,您的数据库中的表更有可能没有主键。在这种情况下,这里的答案适用:

好吧,当遇到没有 PrimaryKey 的表时,它会被视为视图。

视图显示在StorageModel\EntitySet[n]\DefiningQuery元素中的 EDMX 文件(在 XML 编辑器中打开以查看)中。

解决方案:如果您的Recommend表有主键,请检查数据库。如果它没有密钥,请添加一个。

于 2012-06-17T10:51:55.273 回答