2015-06-24 192 views
2

我有一个模型与DatabaseGeneratedOption.Identity,但在特定情况下,想要保存具有特定值为主键的实体;
ie强制id = 1实体框架覆盖DatabaseGeneratedOption.Identity

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

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

实体框架中没有任何东西可以让您使用SET IDENTITY_INSERT ON恐怕。在特定情况下,您可以实施存储过程来完成这项工作:https://msdn.microsoft.com/en-us/data/dn468673.aspx –

回答

0

我通过这个方法做的:

public class User 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public new int Id { get; set; } 

    //Rest of the fields... 
} 

你也可以将它覆盖用户的类。

+0

这不会覆盖SQL Server标识设置。 –

0

您可以在保存更改前设置标识插入。这是样本。

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]替换为用户表的名称。

相关问题