实体框架覆盖DatabaseGeneratedOption.Identity

时间:2015-06-24 09:09:24

标签: entity-framework

我有一个DatabaseGeneratedOption.Identity的模型,但在特定情况下,希望保存具有特定主键值的实体;
即强制id = 1

如果我只是分配值并保存,则id会被自动生成的值覆盖。

var model = new User {Id = 1};
dbContext.SaveChanges();
Asser.AreEqual(1, model.Id); // false

2 个答案:

答案 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...
}

您还可以创建一个覆盖用户的类。