首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用虚拟列表更新模型

无法使用虚拟列表更新模型
EN

Stack Overflow用户
提问于 2014-07-18 09:06:04
回答 1查看 116关注 0票数 0

我的电影模型有一个ICollection的虚拟声明,除了一个之外,它在所有情况下都正常工作。当我尝试从会话变量编辑列表并调用_db.SaveChanges时,它不会被更新为db。让我告诉您,我还有一个ProducerId字段(以及虚拟生成器)正在正确更新。哪里出问题了?

电影模型- Movie.cs

代码语言:javascript
复制
public class Movie
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int MovieId { get; set; }
    public string Name { get; set; }
    public string YearOfRelease { get; set; }
    public string Plot { get; set; }
    public string ImgUrl { get; set; }

    [ForeignKey("Producer")]
    public int ProducerId { get; set; }

    public virtual Producer Producer { get; set; }
    public virtual ICollection<Actor> Actors { get; set; }
    public virtual ICollection<MovieReview> Reviews { get; set; }

}

CreateOrEdit控制器-

代码语言:javascript
复制
public ActionResult CreateOrEdit([Bind(Include = "MovieId, Name, Plot, YearOfRelease")]Movie movie)
    {
        if (ModelState.IsValid)
        {
            int session_producerId = (int)Session["ProducerId"];
            movie.Producer = _db.Producers.Find(session_producerId);
            movie.ProducerId = session_producerId;

            List<int> actors = Session["Actors"] as List<int>;
            ICollection<Actor> session_actors = _db.Actors.Where(a => actors.Contains(a.ActorId)).ToList<Actor>(); 
            movie.Actors = session_actors;

            // add the movie to db before saving if creating new
            if (movie.MovieId == 0)
                _db.Movies.Add(movie);
            else
            // else trigger the edits 
                _db.Entry(movie).State = EntityState.Modified;

            // finally save changes
            _db.SaveChanges();

            // removing session information
            Session.Clear();
            return RedirectToAction("Index");
        }

        return View(movie);
    }

有人能帮我理解为什么_db.Entry(电影).State= EntityState.Modified不更新Actors集合吗?任何帮助都是值得感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-18 12:40:42

尝尝这个,

代码语言:javascript
复制
if (ModelState.IsValid)
{
    Movie movieDb;
    if (movie.MovieId == 0)
    {
        movieDb = new Movie { Actors = new List<Actor>() };
        _db.Movies.Add(movieDb);
    }
    else
    {
        movieDb = _db.Movies.Include(m => m.Actors).FirstOrDefault(m => m.MovieId == movie.MovieId);
    }

    // Sets producer.
    int session_producerId = (int)Session["ProducerId"];
    movieDb.Producer = _db.Producers.Find(session_producerId);
    movieDb.ProducerId = session_producerId;

    // Sets actors.
    List<int> actors = Session["Actors"] as List<int>;
    ICollection<Actor> session_actors = _db.Actors.Where(a => actors.Contains(a.ActorId)).ToList<Actor>();
    Array.ForEach(session_actors.ToArray(), actor => movieDb.Actors.Add(actor));

    // Sets other movie's properties here..


    // finally save changes
    _db.SaveChanges();

    // removing session information
    Session.Clear();
    return RedirectToAction("Index");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24821205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档