无法在asp.net mvc3中将数据保存到数据库

时间:2012-06-17 06:43:03

标签: asp.net-mvc-3 entity-framework linq-to-entities

我想在用户注册后将数据保存到我的数据库中。我在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的表的名称。我用这种方式在另一个控制器中保存befor并且一切正常,但现在我得到了这个例外:

Exception

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

1 个答案:

答案 0 :(得分:2)

异常非常清楚问题是什么:EntitySet Recommend和类型RecommendDefining Query定义。这意味着它是在EDMX文件的存储架构中指定的SQL查询的结果。这类似于从数据库映射视图,即它是只读的,您无法更新它,无法将数据插入集合,也无法从中删除数据。

虽然map Stored Procedures可以对定义查询定义的实体的Insert,Update,Delete操作进行操作,但该异常也表示没有指定任何过程来支持Insert操作。

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

修改

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

  

当遇到没有PrimaryKey的表时,它被视为   一个观点。

     

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

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