C# MVC中更新时的乐观并发问题
在实体框架项目MVC3中,我在编辑视图中使用ViewModel(并使用AutoMapper映射对象) 调用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)。实体可能已被修改或删除,因
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)