Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como posso forçar a estrutura de entidade a inserir colunas de identidade?


EF 6 método, usando o artigo msdn:
using (var dataContext = new DataModelContainer())
using (var transaction = dataContext.Database.BeginTransaction())
{
    var user = new User()
    {
        ID = id,
        Name = "John"
    };

    dataContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[User] ON");

    dataContext.User.Add(user);
    dataContext.SaveChanges();

    dataContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[User] OFF");

    transaction.Commit();
}

Atualização: Para evitar o erro "O valor explícito deve ser especificado para a coluna de identidade na tabela 'TableName' quando IDENTITY_INSERT é definido como ON ou quando um usuário de replicação está inserindo em uma coluna de identidade NOT FOR REPLICATION", você deve alterar o valor de StoreGeneratedPattern propriedade da coluna de identidade de Identidade para Nenhum em modelista.

Observe que a alteração de StoreGeneratedPattern para None falhará na inserção de objeto sem id especificado (maneira normal) com o erro "Não é possível inserir valor explícito para coluna de identidade na tabela 'TableName' quando IDENTITY_INSERT estiver definido como OFF".