首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RowVersion在实体框架上的PostgreSQL实现

RowVersion在实体框架上的PostgreSQL实现
EN

Stack Overflow用户
提问于 2017-03-07 14:40:36
回答 2查看 5.5K关注 0票数 11

我在PostgreSQL中使用实体框架6。我有一个实体希望防止并发问题,在这份文件之后,我添加了一个带有时间戳属性的RowVersion属性,但是在保存对实体的更改后,列RowVersion值将保持在数据库中相同的位置。

代码语言:javascript
复制
    [Timestamp]
    public byte[] RowVersion { get; set; }

我是遗漏了什么,还是在PostgreSQL中有其他方法来处理它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-08 13:46:27

代码语言:javascript
复制
/// <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属性,只是为了在迁移中不添加列,在数据库更新后对其进行注释。

票数 9
EN

Stack Overflow用户

发布于 2019-08-14 13:13:44

只是更新了EF核心的答案,以防其他人在这里游荡。

Npgsql框架内置了对此的支持,使用OP在其实体中使用的隐藏系统列xmin作为NotMapped属性。

作为引用的这里,您可以将xmin列设置为EF中的并发令牌,方法是通过Fluent API在实体的OnModelCreating方法中调用UseXminAsConcurrencyToken方法(据我所知,此时无法使用数据注释)。

对于任何已经使用Fluent API配置的人来说,它非常简单:

代码语言:javascript
复制
public class AwesomeEntityConfiguration : IEntityTypeConfiguration<AwesomeEntity>
{
    public void Configure(EntityTypeBuilder<AwesomeEntity> builder)
    {
        builder.UseXminAsConcurrencyToken();
    }
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42651101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档