我的电影模型有一个ICollection的虚拟声明,除了一个之外,它在所有情况下都正常工作。当我尝试从会话变量编辑列表并调用_db.SaveChanges时,它不会被更新为db。让我告诉您,我还有一个ProducerId字段(以及虚拟生成器)正在正确更新。哪里出问题了?
电影模型- Movie.cs
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控制器-
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集合吗?任何帮助都是值得感激的。
发布于 2014-07-18 12:40:42
尝尝这个,
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");
}https://stackoverflow.com/questions/24821205
复制相似问题