【问题标题】:Finding value of object id查找对象 id 的值
【发布时间】:2014-03-18 14:55:10
【问题描述】:

我创建了一个操作结果,允许餐厅将他们的菜单保存到数据库中。我的问题是我需要将menuID 用于另一个控制器,但是当我运行代码时,变量menuID 始终为0,而​​不是刚刚添加到数据库中的值。

任何帮助将不胜感激。

创建菜单操作结果

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(MenuViewModel model)
{
     if (ModelState.IsValid)
     {
          var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
          var currentUser = manager.FindById(User.Identity.GetUserId());
          using (var objCtx = new ApplicationDbContext())
          {
               var currentrestaurant = (from r in objCtx.Restaurants
                                        where r.UserID == currentUser.Id
                                        select r).First<Restaurant>().id;
               var menu = new Menu() { Name = model.Name, Restaurantid = currentrestaurant };
               var menuID = menu.Id;
               db.Menus.Add(menu);
               db.SaveChanges();
               return RedirectToAction("Create", "Meal", new { MenudID = menuID});
          }
      }
      return View();
}

【问题讨论】:

  • 您只是创建了一个 Menu 实例,并没有为 Id 属性赋予任何值。那么您希望发生什么?
  • 嗯,不确定,因为我使用了这样的 linq,但它没有执行并返回 ID,所以不会移动 var menuID = menu.Id;保存后更改工作?
  • @Selman22 好吧,这可能是使用财产恶作剧来做到的,如果没有更多信息,就无法回答这个问题。
  • 如何获取 Menu 实例的 ID?它是数据库中自动递增的 int。

标签: c# asp.net asp.net-mvc variables


【解决方案1】:

ID 很可能是在数据库中生成的。如果是这种情况,menu.Id 将具有实际值之后,您将对象保存到 DB,而不是之前。所以你需要重新排序你的代码:

var menu = new Menu() { Name = model.Name, Restaurantid = currentrestaurant };
db.Menus.Add(menu);
db.SaveChanges();

return RedirectToAction("Create", "Meal", new { MenudID = menu.Id});

旁注。确保最后一行中的参数拼写正确 - 不应该是 MenuID 而不是 MenudID

【讨论】:

    猜你喜欢
    • 2014-03-09
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 2013-05-11
    • 2022-01-18
    相关资源
    最近更新 更多