在MVC3,Entity Framework项目中,我在编辑视图中使用ViewModel(和AutoMapper来映射对象)。
调用db.SaveChanges();
(在编辑视图中)时会出错,
保存不公开外键的实体时发生错误 他们关系的属性。 EntityEntries属性将 返回null,因为无法将单个实体标识为源 例外。可以在保存时处理异常 通过在实体类型中公开外键属性更容易。看到 详细信息的InnerException
内部异常是,
存储更新,插入或删除语句会影响意外 行数(0)。自那以后,实体可能已被修改或删除 实体已加载。刷新ObjectStateManager条目。
我在网上搜索了此错误消息,现在我猜这是乐观并发问题,由 Post 模型中定义的一对多关系引发,
Post.Postedby - >用户
Post.Author - >作者
(这可能是由于,我试图更新的Post模型是分离的,并且在调用SaveChanges
时没有现有值)
模型
public class Post
{
[Key]
public int Id { get; set; }
...
public virtual User PostedBy { get; set; }
public virtual Author Author { get; set; }
}
public class User
{
[Key]
public virtual Guid UserId { get; set; }
...
public virtual ICollection<Post> Posts { get; set; }
}
public class Author
{
public int Id { get; set; }
...
public virtual ICollection<Post> Posts { get; set; }
}
控制器
[HttpPost]
public ActionResult Edit(PostEditViewModel postEditViewModel, FormCollection form)
{
if (ModelState.IsValid)
{
var post = Mapper.Map<PostEditViewModel, Post>(postEditViewModel);
db.Entry(post).State = EntityState.Modified;
string authorId = form["AuthorId"];
post.Author = GetAuthorById(Convert.ToInt32(authorId));
post.PostedBy = GetUserByName(User.Identity.Name);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(postEditViewModel);
}
请帮我解决这个问题...