使用 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();
非常感谢!
解决此问题的一个简单方法是使用 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();