自定义Schema下Temporal Tables结合LINQ无历史数据问题求助
如何在自定义Schema与LINQ环境下配置Temporal Tables使其正常工作?
开发环境
- .NET 6
- Microsoft SQL Server 2019 (RTM-GDR) (KB5014356) - 15.0.2095.3 (X64),发布于2022年4月29日 18:00:13,运行在Windows 10 Pro 10.0 (Build 19044)系统上的64位Express版本
问题现象
Temporal Tables在[dbo]默认Schema下可正常运行,但切换到[pm]这类自定义Schema后,使用LINQ插入数据,历史表中无数据生成。
问题重现步骤
- 创建新数据库
- 创建启用
SYSTEM_VERSIONING = ON的新表 - 为
Bookmark实体创建简单EF Core模型 - 在
OnModelCreating中配置时态表:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder .Entity<Bookmark>() .ToTable("Bookmark", b => b.IsTemporal()); }
- 使用LINQ向
Bookmark表插入数据
相关T-SQL代码
-- 创建数据库 CREATE DATABASE [SampleDb] GO USE [SampleDb] GO -- 创建自定义Schema CREATE SCHEMA [pm] AUTHORIZATION [dbo] GO -- 创建启用系统版本控制的表 CREATE TABLE [pm].[Bookmark]( [Id] [uniqueidentifier] NOT NULL, [Description] [nvarchar](max) NOT NULL, [PeriodStart] DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL DEFAULT '0001-01-01T00:00:00.0000000', [PeriodEnd] DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL DEFAULT '9999-12-31T23:59:59.9999999', PERIOD FOR SYSTEM_TIME ([PeriodStart], [PeriodEnd]), CONSTRAINT [Pk_Bookmark_Id] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [pm].[BookmarkHistory], DATA_CONSISTENCY_CHECK = ON)) GO -- LINQ生成的插入语句(自定义Schema下) EXEC sp_executesql N'SET NOCOUNT ON; INSERT INTO [pm].[Bookmark] ([Id],[Description]) VALUES (@p0, @p1); SELECT [PeriodEnd], [PeriodStart] FROM [pm].[Bookmark] WHERE @@ROWCOUNT = 1 AND [Id] = @p0;', N'@p0 uniqueidentifier,@p1 nvarchar(4000)' ,@p0='3ED9066F-4902-4626-A16B-BC3594308AFB',@p1='test' GO -- 查询结果 SELECT *,[PeriodStart],[PeriodEnd] FROM [pm].[Bookmark] GO SELECT * FROM [pm].[BookmarkHistory]
参考链接
内容的提问来源于stack exchange,提问作者Thuat Nguyen
相关产品推荐
相关产品推荐

