我想在用户注册后将数据保存到我的数据库中。我在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并且一切正常,但现在我得到了这个例外:
有谁能告诉我这个问题是什么? 非常感谢
答案 0 :(得分:2)
异常非常清楚问题是什么:EntitySet Recommend
和类型Recommend
由Defining 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
表是否有主键。如果没有密钥,请添加一个密钥。