C# MVC中更新时的乐观并发问题

C# MVC中更新时的乐观并发问题,c#,asp.net-mvc-3,entity-framework-4.1,automapper,C#,Asp.net Mvc 3,Entity Framework 4.1,Automapper,在实体框架项目MVC3中,我在编辑视图中使用ViewModel(并使用AutoMapper映射对象) 调用db.SaveChanges()时(在编辑视图中)出现错误 保存不公开外键的实体时出错 属性的关系。EntityEntries属性将 返回null,因为无法将单个实体标识为源 这是个例外。可以在保存时处理异常 通过在实体类型中公开外键属性更容易。看见 有关详细信息,请参阅InnerException 内部例外是 受意外事件影响的存储更新、插入或删除语句 行数(0)。实体可能已被修改或删除,因

在实体框架项目MVC3中,我在编辑视图中使用ViewModel(并使用AutoMapper映射对象)

调用
db.SaveChanges()时(在编辑视图中)出现错误

保存不公开外键的实体时出错 属性的关系。EntityEntries属性将 返回null,因为无法将单个实体标识为源 这是个例外。可以在保存时处理异常 通过在实体类型中公开外键属性更容易。看见 有关详细信息,请参阅InnerException

内部例外是

受意外事件影响的存储更新、插入或删除语句 行数(0)。实体可能已被修改或删除,因为 实体已加载。刷新ObjectStateManager条目

我在网络上搜索了这个错误消息,现在我想这是乐观并发性问题,由Post模型中定义的一对多关系引起

Post.Postedby->User

Post.Author->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; }
}
公共类职位
{
[关键]
公共int Id{get;set;}
...
公共虚拟用户PostedBy{get;set;}
公共虚拟作者{get;set;}
}
公共类用户
{
[关键]
公共虚拟Guid用户标识{get;set;}
...
公共虚拟ICollection Posts{get;set;}
}
公共类作者
{
公共int Id{get;set;}
...
公共虚拟ICollection 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);
 }
[HttpPost]
公共操作结果编辑(PostEditViewModel PostEditViewModel、FormCollection表单)
{
if(ModelState.IsValid)
{
var post=Mapper.Map(postEditViewModel);
db.Entry(post.State=EntityState.Modified;
字符串authorId=表单[“authorId”];
post.Author=GetAuthorById(Convert.ToInt32(authord));
post.PostedBy=GetUserByName(User.Identity.Name);
db.SaveChanges();
返回操作(“索引”);
}
返回视图(postEditViewModel);
}

请帮助我解决此问题…

在编辑视图中添加此选项修复了此问题:)


中学习,在编辑视图中添加此选项修复了问题:)

学习

@Html.HiddenFor(model => model.Id)