我有一个DatabaseGeneratedOption.Identity
的模型,但在特定情况下,希望保存具有特定主键值的实体;
即强制id = 1
如果我只是分配值并保存,则id会被自动生成的值覆盖。
var model = new User {Id = 1};
dbContext.SaveChanges();
Asser.AreEqual(1, model.Id); // false
答案 0 :(得分:1)
您可以在保存更改之前设置标识插入。这是样本。
var model = new User {Id = 1};
dbContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[User] ON");
dbContext.SaveChanges();
dbContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[User] OFF");
Asser.AreEqual(1, model.Id);
将[dbo]。[User]替换为用户表的名称。
答案 1 :(得分:0)
我是通过这种方法做到的:
public class User
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public new int Id { get; set; }
//Rest of the fields...
}
您还可以创建一个覆盖用户的类。