是否可以使用 EF Core 自定义初始化逻辑来植入具有特定标识符的数据?

问题描述 投票:0回答:1

使用 EntityFramework Core 7.0,我想播种一些数据,同时能够为要创建的记录指定标识符(主键)。

由于集成测试需要此播种,并且数据库仅创建一次,因此我无法在数据库上下文的

.HasData()
函数中使用
OnModelCreating
方法(如文档中所建议)。

文档的这一部分建议使用自定义初始化逻辑。
这正是我在每次测试后能够再次播种数据所需要的。
但是,我找不到任何干净的方法来使用此方法为我的记录提供标识符。

我设法以一种我不太喜欢的方式解决了我的问题,并且想知道是否有更干净的方法。

我的临时工作解决方案的简化代码示例:

context.Database.BeginTransaction(System.Data.IsolationLevel.Unspecified);

context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT Notification ON");

await context.Notification.AddRangeAsync(data);

context.SaveChanges();

context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT Notification OFF");

context.Database.CommitTransaction();

非常感谢!

c# testing .net-core entity-framework-core seeding
1个回答
0
投票

解决此问题的一个简单方法是使用 SQL 命令

SET IDENTITY_INSERT
:

context.Database.BeginTransaction(System.Data.IsolationLevel.Unspecified);

context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT Notification ON");

await context.Notification.AddRangeAsync(data);

context.SaveChanges();

context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT Notification OFF");

context.Database.CommitTransaction();
© www.soinside.com 2019 - 2024. All rights reserved.