2012-06-17 67 views
0

我想在用户注册后将数据保存到我的数据库。我在帐户控制器的Registerfunctin中编写代码。代码是:无法将数据保存到asp.net中的数据库mvc3

[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节省,一切都OK,但现在我得到这个异常:

Exception

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

+1

您是否使用StoredProcedure来处理此推荐表的添加和更新? –

+0

你可以在这里粘贴“复制异常详细信息到剪贴板”的细节吗?这些信息通常更有帮助。你也可以粘贴你的桌子设计图片吗? – Sparkle

回答

2

唯一的例外是相当清楚的问题是什么:该EntitySet的Recommend和类型RecommendDefining Query定义。这意味着它是在EDMX文件的商店模式中指定的SQL查询的结果。这与从数据库映射视图类似,即它是只读的,并且不能更新它,不能将数据插入到数据集中,也不能从中删除数据。

虽然可以通过map Stored Procedures对定义查询定义的实体的插入,更新和删除操作,但该例外还说没有过程被指定为支持插入操作。

你说的是Recommend,所以问题是为什么Recommend集不直接映射到此表。据我所知,定义查询必须由开发人员手动编写并手动输入到EDMX文件中。 “从数据库更新模型”不会创建定义查询。谁写了这个查询?你是怎么创建EDMX文件的?数据库 - 首先或模型 - 首先或手写的XML或...?

编辑

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

那么如果一个表没有它被视为 一个视图中的PrimaryKey遇到。

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

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