1

当用户单击链接时,此方法获取用户 ID 和其他数据并将其写入数据库。由于 id 是自动生成的,我似乎无法找到一种方法来跟踪用户 ID 是什么。

我将会员基础与我的基础分开使用。为了找到用户 ID,我试图比较用户名字符串。我收到此错误:“在执行当前 Web 请求期间生成了未处理的异常。” 还有“无法创建抽象类”。 有没有更好的方法来比较两个数据库中的两个字符串?或者,还有更好的方法?这是我第一次使用 lambda 表达式。

我尝试使用 Single() 和 First() 而不是 Where(),但我仍然得到同样的错误。

[HttpPost]
public ActionResult AddToList(Review review, int id, HttpContextBase context)
    {
        try
        {
            if (ModelState.IsValid)
            {
                //User user = new User();
                //user.UserID = db.Users.Where(c => c.UserName == context.User.Identity.Name);
                User user = new User();
                Movie movie = db.Movies.Find(id);
                review.MovieID = movie.MovieID;

                string username = context.User.Identity.Name;
                user = (User)db.Users.Where(p => p.UserName.Equals(username));

                review.UserID = user.UserID;
                db.Reviews.Add(review);
                db.SaveChanges();
                return RedirectToAction("Index");
             };

        }
        catch (DataException)
        { 
            //Log the error (add a variable name after DataException)
            ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
        }
        return View(review);
    }
4

1 回答 1

1

你的问题很可能是这一行:

user = (User)db.Users.Where(p => p.UserName.Equals(username));

扩展方法返回一个 IEnumerable,而Where()不是单个实例,因此您的隐式转换每次都会失败。你要找的是要么First()要么FirstOrDefault()First()如果没有匹配,将抛出异常,如果没有FirstOrDefault()找到匹配,则返回 null。该行应该是:

user = db.Users.First(p => p.UserName.Equals(username));

你可能有比这更大的问题,但这是你当前错误的原因。

编辑

进一步查看您的代码后,您会在操作结果调用中要求一个 HttpContextBase 。你从不使用它,这可能是Cannot create an abstract class异常的原因。删除该参数,看看你是否得到任何不同的结果。

于 2012-04-26T20:21:03.597 回答