是否可以使用相同的DbContext获取RowVersion的新值,而无需从数据库重新加载实体?
情景:
所有并发控制文章通常只关注阻止更新(例如,请参阅this)。 但是,在本文的示例中,成功更新之后是重定向到页面,其中再次读取保存的实体,现在它具有新的RowVersion值。我想避免这种重定向。
答案 0 :(得分:1)
感谢格林尼斯,我找到了问题的根源。
我定义了界面和像
这样的实体public interface IRowVersion
{
// Attention: this will not be "inherited" by the implementing class !!!
[Timestamp]
byte[] VersionStamp { get; set; }
}
public class Directory : IRowVersion
{
[Key]
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
// If this attribute is missing here, then row version is used
// My initial version was without this attribute
[Timestamp]
public byte[] VersionStamp { get; set; }
}
在我有问题的版本中,我认为在接口属性上使用属性就足够了。但是,必须在实体的属性上显式应用该属性。否则它根本不会被使用(甚至不是更新SQL语句的一部分)。该值只是因为DB自动更新列值而更新,当然,在下次读取时,我得到了新值。
与问题不完全相关,但仍值得一提......以下是EF6的杀手级功能
ctx.Database.Log = s => Debug.Write(s);
SQL事件探查器,很高兴知道你: - )