Mapeie uma coluna para ser identidade em dB
-
25-09-2019 - |
Pergunta
Embora eu tenha marcado minha coluna de identificação com .Identity()
, o esquema de banco de dados gerado não tem IDENTITY
Defina como True, o que me dá problemas quando estou adicionando registros. Se eu editar manualmente o esquema de banco de dados (no SQL Management Studio) para ter o Id
coluna marcada IDENTITY
, tudo funciona como eu quero - simplesmente não consigo fazer o EF fazer isso por si só.
Este é o meu mapeamento completo:
public class EntryConfiguration : EntityConfiguration<Entry>
{
public EntryConfiguration()
{
Property(e => e.Id).IsIdentity();
Property(e => e.Amount);
Property(e => e.Description).IsRequired();
Property(e => e.TransactionDate);
Relationship(e => (ICollection<Tag>)e.Tags).FromProperty(t => t.Entries);
}
}
Enquanto estou usando o EF para construir e reconstruir o banco de dados para testes de integração, eu realmente preciso que isso seja feito automaticamente ...
EDITAR:HM ... Em um comentário, fui solicitado a fornecer código suficiente para executar isso, então eu cortei e coloquei meu código em um aplicativo de console (para que você não precisasse de todas as minhas aulas ...) e de repente funcionou . Acho que estava esquecendo algum método chamado em algum lugar, embora não tenha conseguido descobrir onde.
Vou postar o código de solução em funcionamento em uma resposta a esta postagem, caso outra pessoa venha procurando por ele.
Solução
A execução deste código resolve o problema. Acho que devo ter esquecido um passo em algum lugar; portanto, se você tiver o mesmo problema, certifique -se de fazer todas essas coisas:
var connection = GetUnOpenedSqlConnection(); // Any connection that inherits
// from DbConnection is fine.
var builder = new ContextBuilder<ObjectContext>(); // I actually had my own class
// that inherits from
// ObjectContext, but that was
// not the issue (I checked).
builder.Configurations.Add(EntryConfiguration); // EntryConfiguration is the
// class in the question
var context = builder.Create(connection);
if (context.DatabaseExists())
{ context.DeleteDatabase(); }
context.CreateDatabase();