我在mvc4中编辑时遇到问题。在控制器中我添加了这段代码:
public ActionResult Edit(int id)
{
using (var db = new MainDatabaseEntities())
{
var data = db.ANIME.Where(s => s.ID_AN == id).Select(c => new { ID_AN = c.ID_AN, TITLE_OR = c.TITLE_OR, TITLE_EN = c.TITLE_EN, GENRES = c.GENRES}).ToList().Select(s => new
{
ViewModel = new ANIME
{
ID_AN = s.ID_AN,
TITLE_OR = s.TITLE_OR,
TITLE_EN = s.TITLE_EN,
},
GENREID = s.GENRES.Select(c => c.ID_GE),
}).SingleOrDefault();
if (data == null)
return HttpNotFound();
data.ViewModel.GENRES = db.GENRES.Select(c => new { ID_GE = c.ID_GE, GENRE = c.GENRE}).ToList().Select(c => new GENRES
{
ID_GE = c.ID_GE,
GENRE = c.GENRE
}).ToList();
foreach (var c in data.ViewModel.GENRES)
c.isSelected = data.GENREID.Contains(c.ID_GE);
return View(data.ViewModel);
}
}
[HttpPost]
public ActionResult Edit(ANIME anime)
{
var db = new MainDatabaseEntities();
var editanime = db.ANIME.Include("GENRES").FirstOrDefault(a => a.ID_AN == anime.ID_AN);
if (editanime == null)
{
editanime.GENRES = anime.GENRES;
}
foreach (var genre in anime.GENRES)
{
if (genre.isSelected)
{
if (!editanime.GENRES.Any(c => c.ID_GE == genre.ID_GE))
{
var addedgenre = new GENRES { ID_GE = genre.ID_GE };
db.GENRES.Attach(addedgenre);
editanime.GENRES.Add(addedgenre);
}
}
else
{
var removedgenre = editanime.GENRES.SingleOrDefault(c => c.ID_GE == genre.ID_GE);
if (removedgenre != null)
editanime.GENRES.Remove(removedgenre);
}
}
}
db.SaveChanges();
return RedirectToAction("Index");
}
当我使用复选框编辑流派时会保存,但如果我更改TITLE_OR或TITLE_EN则没有任何反应。我尝试添加db.Entry(anime).State = EntityState.Modified;
,但后来收到错误:An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
有什么方法可以解决这个问题吗?
编辑:我仍然有这个问题; _;。我试图添加AsNoTracking()但是类型不会保存。请帮忙......