MVC 5.0 奇怪的行为

MVC 5.0 strange behavior

当我运行这个动作每次都增加rating.Likes。 我能帮忙吗?

public ActionResult Like(int id)
{
    ApplicationDbContext db = new ApplicationDbContext();
    var rating = db.Ratings.FirstOrDefault(x => x.id == id);

    if (!(rating.RatedFrom.Contains(User.Identity.Name)))
    {
        rating.Likes++;
        rating.RatedFrom.Add(User.Identity.Name); 
    }

    rating.Views--;
    db.SaveChanges();
    return RedirectToAction("Details", db.ImageModels.FirstOrDefault(x => x.id == id));
}

1) 创建 RatedFrom class:

public class RatedFrom
{
    public int Id {get; set;}
    public string UserName {get; set;}
    public DateTime RatedDate {get; set;}
    /*Other properties*/
}

2) 在 Ratings

设置 RatedFrom
public class Rating 
{
    /*Other properties*/

    public virtual ICollection<RatedFrom> RatedFromList {get; set;}

    public Rating()
    {
        /*Other properties initialization*/
        RatedFromList = new List<RatedFrom>();
    }
}

3) 在 DbContext 处设置 RatedFrom 以映射到数据库:

public DbSet<RatedFrom> RatedFrom { get; set; }

4) 更改控制器代码:

if (!(rating.RatedFromList.Where(x=> x.UserName == User.Identity.Name).Count() > 0))
{
    rating.Likes++;
    rating.RatedFrom.Add(new RatedFrom {  UserName = User.Identity.Name }); 
}

大功告成!鉴于您使用的是编码优先。如果您使用数据库优先,则必须手动创建 class mapp:Mapping to Existing Table in the Database