Código do Entity Framework Primeiras Migrações: Definir Valor da Chave Primária

Eu tenho uma tabela que armazena alguns dados extras para algumas linhas de uma tabela como:

public class QuoteExtra
{
    [Key]
    public int QuoteId { get; set; }
    // More fields here
}

Eu gostaria de poder adicionar linhas a esta tabela onde eu defino explicitamente o PK.

Se eu simplesmente deixar como acima, definir um valor e enviar a linha faz com que o valor seja descartado e substituído pelo valor gerado automaticamente do banco de dados (e a coluna é definida como uma coluna Identity no esquema real).

Esta parece ser a solução certa:

public class QuoteExtra
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int QuoteId { get; set; }
    // More fields here
}

No entanto, isso me faz a exceção:

Não é possível inserir um valor explícito para a coluna de identidade na tabela 'EnumTest' quando IDENTITY_INSERT está definido como OFF.

Então, como eu escrevo minha classe para poder definir o valor de uma chave primária no EF?

Editar:

Eu tentei adicionar a seguinte migração baseada em código para definir IDENTITY_INSERT como ON:

public override void Up()
{
    Sql("SET IDENTITY_INSERT QuoteExtra ON");
}

Eu corri e tentei novamente, mas recebi a mesma exceção acima. O que é estranho é que o banco de dados reflete essa configuração, e executar o SQL diretamente nele permite inserir valores arbitrários na chave primária - assim, parece que o próprio Entity Framework está impondo essa regra e não reconhece que IDENTITY_INSERT não está em fato desativado. Eu preciso configurá-lo em algum lugar da própria EF?

Editar 2:

Eu não entendi IDENTITY_INSERT; Eu assumi que defini-lo uma vez deixei-o nessa mesa indefinidamente. Na verdade, ela dura tanto quanto a "Sessão", o que significa que, por exemplo, configurá-la em uma migração significa que ela existe ... contanto que a migração seja executada e não tenha relação com conexões futuras como a minha .Add () com EF , o que explica porque eu ainda tenho essa exceção - o DB realmente é a fonte da exceção, não da EF. Como IDENTITY_INSERT é limitado a no máximo uma tabela por sessão, é uma maneira bastante ineficiente de fazer isso - não criar uma coluna Identity PK parece ser uma rota melhor.

questionAnswers(3)

yourAnswerToTheQuestion