Entity Framework Core是否具备NHibernate版本号自动管理的等效功能?
Entity Framework Core 中的版本号映射(对应NHibernate的Version功能)
EF Core 提供了类似NHibernate中版本号自动管理的功能,主要通过**并发令牌(Concurrency Token)**实现,分两种常见场景:
1. 使用数据库原生的RowVersion/Timestamp类型(推荐)
这种方式由数据库自动维护版本号,无需手动处理递增逻辑,并发冲突时EF Core会自动抛出DbUpdateConcurrencyException。
实体定义与配置
- 实体属性:
public byte[] Version { get; set; } - 数据注解方式:
[Timestamp] public byte[] Version { get; set; } - Fluent API方式:
modelBuilder.Entity<YourEntity>() .Property(e => e.Version) .IsRowVersion();
2. 自定义整数类型版本号(模拟NHibernate的整数自增版本)
如果需要和NHibernate一致的整数类型版本号(默认值1,每次更新自动递增),可以通过以下配置实现:
实体定义与配置
- 实体属性:
public int VersionNumber { get; set; } - Fluent API配置:
modelBuilder.Entity<YourEntity>() .Property(e => e.VersionNumber) .IsConcurrencyToken() // 标记为并发令牌,用于并发冲突检测 .HasDefaultValue(1) // 设置初始默认值为1 .ValueGeneratedOnAddOrUpdate(); // 指定新增/更新时自动生成值
注意:
ValueGeneratedOnAddOrUpdate需要数据库层面支持自动递增逻辑,例如在SQL Server中可配合触发器实现更新时版本号+1,或者在EF Core的SaveChanges前手动处理版本号递增。
内容的提问来源于stack exchange,提问作者rank0001
相关产品推荐
相关产品推荐

