在MVC中更新模型时,我一直在寻找一种标记属性的正确方法.
例如,让我们采用这个小模型:
class Model
{
[Key]
public Guid Id {get; set;}
public Guid Token {get; set;}
//... lots of properties here ...
}
Run Code Online (Sandbox Code Playgroud)
然后MVC创建的编辑方法如下所示:
[HttpPost]
public ActionResult Edit(Model model)
{
if (ModelState.IsValid)
{
db.Entry(model).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
现在如果我的View不包含令牌,它将通过该编辑无效.
我正在寻找这样的东西:
db.Entry(model).State = EntityState.Modified;
db.Entry(model).Property(x => x.Token).State = PropertyState.Unmodified;
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现的最好的方法是包容并设置我想要包含的所有属性,但我真的只想说哪些属性被排除在外.
我有一个对象,有一个密钥存储为GUID以及一个friendlyID,如下所示:
public class Job {
[Key]
public Guid Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int FriendlyId { get; set; }
public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用我的更新方法更新说明时:
public void Update(Job job, Job jobParam) {
if (job == null) {
throw new AppException("Job does not exist");
}
//Update job properties
job.Description = jobParam.Description;
_context.Job.Update(job);
_context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说明:
System.Data.SqlClient.SqlException:无法更新标识列'FriendlyId'
我已经确保正确的对象正在尝试更新,但我无法理解为什么在没有更改时,friendlyID会尝试更新.在线查看时我可以看到EF核心1.1中存在一个导致此问题发生的错误,但没有关于2.0或关于不是关键的值的问题.