Usuário com melhor resposta
Caso de Estudo EF 6 e Migrations

Pergunta
-
Caros.
Preciso de uma ajuda.
Estou fazendo um caso de estudo para implementar uma estrutura de desenvolvimento em um projeto, mas estou com alguns probleminhas.
Bom, vou começar.
O caso de estudo usa o EF 6 com Migrations em modo 'Auto'.
Tenho a entidade Contato que possui um FK Aluno_Codigo, quando coloco a propriedade Aluno (virtual property) o Migration cria a coluna Aluno_Codigo no banco, mas cria como nullable, sendo que o certo seria not null, por que em Aluno o campo Código é not null.
Se eu colocar o campo forçado Aluno_Codigo e a virtual property Aluno o Migration cria dois campos: Aluno_Codigo e Aluno_Codigo1.
Poderiam me ajudar com esse caso, pois trabalharei em uma estrutura de dados um pouco grande e com essas tecnologias diminuiria o tempo de desenvolvimento e criação do banco, sendo que as atualizações de versão seriam mais rápidas e unificadas.
Poderiam me dizer o que está faltando para que o EF e o Migrations se entendam com as configurações?
Grato. Segue abaixo os códigos.
Entidade Aluno
public class Aluno { public Int64 Codigo { get; set; } public string Nome { get; set; } public int Idade { get; set; } public DateTime DataNascimento { get; set; } public virtual ICollection<Disciplina> Disciplina { get; set; } public virtual ICollection<Contato> Contato { get; set; } } public class AlunoEntityTypeConfiguration : EntityTypeConfiguration<Aluno> { public AlunoEntityTypeConfiguration() { } }
Entidade Contato
public class Contato { public int Codigo { get; set; } //public Int64 Aluno_Codigo { get; set; } public virtual Aluno Aluno { get; set; } public string Valor { get; set; } } public class ContatoEntityTypeConfiguration : EntityTypeConfiguration<Contato> { public ContatoEntityTypeConfiguration() { } }
Meu contexto
namespace EstudoEF6Console { public class EstudoEF6DbContext: DbContext { static EstudoEF6DbContext() { //Database.SetInitializer(new MigrateDatabaseToLatestVersion<EstudoEF6DbContext, Migrations.Configuration>()); Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EstudoEF6DbContext>()); } public EstudoEF6DbContext() { base.Configuration.LazyLoadingEnabled = false; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly()); modelBuilder.Conventions.Add(new Convencoes.ChavePrimariaConvention()); //modelBuilder.Conventions.Add(new Convencoes.ChaveEstrangeiraConvention()); modelBuilder.Conventions.Add(new Convencoes.NormalizandoTiposConvention()); modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); //modelBuilder.Conventions.Remove<NavigationPropertyNameForeignKeyDiscoveryConvention>(); } } }
E meu Migrations
internal sealed class Configuration : DbMigrationsConfiguration<EstudoEF6Console.EstudoEF6DbContext> { public Configuration() { AutomaticMigrationsEnabled = true; } protected override void Seed(EstudoEF6Console.EstudoEF6DbContext context) { // This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method // to avoid creating duplicate seed data. E.g. // // context.People.AddOrUpdate( // p => p.FullName, // new Person { FullName = "Andrew Peters" }, // new Person { FullName = "Brice Lambson" }, // new Person { FullName = "Rowan Miller" } // ); // } }
Respostas
-
Diogo, usa o DataAnnotation.
Ficaria assim:
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; public class Contato { public int Codigo { get; set; } [Required] public Int64 Aluno_Codigo { get; set; } [ForeignKey("Aluno_Codigo")] public virtual Aluno Aluno { get; set; } public string Valor { get; set; } }
- Sugerido como Resposta Eduardo.RomeroModerator segunda-feira, 18 de maio de 2015 13:44
- Marcado como Resposta Eduardo.RomeroModerator segunda-feira, 18 de maio de 2015 13:44