首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未使用PostgreSQL更新实体框架核心RowVersion列

未使用PostgreSQL更新实体框架核心RowVersion列
EN

Stack Overflow用户
提问于 2017-11-14 16:56:48
回答 1查看 2.6K关注 0票数 4

我已经为我的实体设置了一个RowVersion列,但它似乎没有存储任何有关创建或更新的内容。

它在DbContext OnModelCreating中具有此配置

代码语言:javascript
复制
 modelBuilder.Entity<Author>()
    .Property(a => a.RowVersion)
    .IsConcurrencyToken()
    .ValueGeneratedOnAddOrUpdate();

但是,即使在实体更新/创建之后,RowVersion列也始终为NULL。

顺便说一下,我在Npgsql库(NuGet)中使用PostgreSQL。在文件里,PostgreSQL doesn't support computed values on add or update

这是它不起作用的原因吗?

如果是这样,为什么我们可以绕过这个限制呢?

另外,我还测试过:

代码语言:javascript
复制
modelBuilder.Entity<Author>().Property<byte[]>("RowVersion")
    .HasColumnName(ShadowPropertiesDb.RowVersion)
    .IsRowVersion();

它会导致同样的问题。

EN

回答 1

Stack Overflow用户

发布于 2019-02-14 22:13:55

在PostgreSQL中,RowVersion被预定义为名为"xmin“的列。

示例属性(仅适用于Npgsql):

代码语言:javascript
复制
[ConcurrencyCheck]
[Column("xmin",TypeName = "xid")]
public long RowVersion { get; set; }

如果希望该属性为byte[]类型:

步骤1:将属性类型更改为byte[]

代码语言:javascript
复制
[ConcurrencyCheck]
[Column("xmin",TypeName = "xid")]
public byte[] RowVersion { get; set; }

步骤2:在"OnModelCreating(ModelBuilder builder)“中添加转换器

代码语言:javascript
复制
var converter = new ValueConverter<byte[], long>(
     v => BitConverter.ToInt64(v, 0), 
     v => BitConverter.GetBytes(v));

builder.Entity<Author>()
   .Property(_ => _.RowVersion)
   .HasConversion(converter);

适用于多种数据库类型=================的================

属性:

代码语言:javascript
复制
[ConcurrencyCheck]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public byte[] RowVersion { get; set; }

在"OnModelCreating(ModelBuilder Builder)“中:

代码语言:javascript
复制
if (Database.IsNpgsql())
{
    var converter = new ValueConverter<byte[], long>(
        v => BitConverter.ToInt64(v, 0),
        v => BitConverter.GetBytes(v));

    builder.Entity<Author>()
            .Property(_ => _.RowVersion)
            .HasColumnName("xmin")
            .HasColumnType("xid")
            .HasConversion(converter);
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47281414

复制
相关文章

相似问题

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