IDENTITY_INSERT durante a propagação com o EntityFramework 6 Code-First
Eu tenho uma entidade que tem umAuto-identity (int)
coluna. Como parte da semente de dados, desejo usar valores de identificador específicos para os "dados padrão" no meu sistema; depois disso, quero ter o banco de dados para classificar o valor da identificação.
Até agora eu tenho sido capaz de definir oIDENTITY_INSERT
para On como parte do lote de inserção, mas o Entity Framework não gera uma instrução de inserção que inclua oId
. Isso faz sentido, pois o modelo pensa que o banco de dados deve fornecer o valor, mas, neste caso, quero fornecer o valor.
Modelo (pseudo-código):
public class ReferenceThing
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id{get;set;}
public string Name{get;set;}
}
public class Seeder
{
public void Seed (DbContext context)
{
var myThing = new ReferenceThing
{
Id = 1,
Name = "Thing with Id 1"
};
context.Set<ReferenceThing>.Add(myThing);
context.Database.Connection.Open();
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT ReferenceThing ON")
context.SaveChanges(); // <-- generates SQL INSERT statement
// but without Id column value
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT ReferenceThing OFF")
}
}
Alguém capaz de oferecer algum insight ou sugestão?