我正在使用Entity Framework 6和PostgreSQL。 我有一个实体,我希望防止并发问题,在this documentation之后我添加了一个带有[Timestamp]属性的RowVersion属性,但是在保存对实体的更改后,列RowVersion值在数据库中保持不变。
[Timestamp]
public byte[] RowVersion { get; set; }
我是否遗漏了某些内容,或者是否有另一种方法可以在PostgreSQL中处理它?</ p>
答案 0 :(得分:3)
/// <summary>
/// Meant to validate concurrency en database update
/// This column is updates itself in database and only works in postgresql
/// </summary>
[ConcurrencyCheck]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
//[NotMapped]
public string xmin { get; set; }
只是为了不在迁移中添加的列添加[NotMapped]属性,在数据库更新后对其进行了评论。
答案 1 :(得分:0)
只是其他人在这里徘徊的EF Core更新答案。
Npgsql框架使用OP在其实体中用作NotMapped
属性的隐藏系统列 xmin 对此提供了内置支持。
如所引用的here一样,您可以通过Fluent API在实体的UseXminAsConcurrencyToken
方法中调用实体上的OnModelCreating
方法(数据注释,将xmin列设置为EF中的并发令牌)据我所知,目前暂时无法使用。
对于已经使用Fluent API配置的任何人,就这么简单:
public class AwesomeEntityConfiguration : IEntityTypeConfiguration<AwesomeEntity>
{
public void Configure(EntityTypeBuilder<AwesomeEntity> builder)
{
builder.ToTable("Awesomeness");
builder.HasKey(pk => pk.Id);
// ADD THIS LINE
builder.UseXminAsConcurrencyToken();
builder.Property(p => p.IsAwesome)
.IsRequired();
}
}