Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Estou com dúvida no curso de Entity Framework, no exercício do capítulo Configurando e Entendendo o Entity Framework.

Na aula foi mostrada como fazer a configuração utilizando a base de dados local do SQL server (que vem com visual studio);

A minha questão é, como fazer para utilizar, por exemplo a base de dados do MySQL?

E para produção, como fazer a migração sem perder dados?

obrigado pela atenção

5 respostas

No assistente do Entity Data Model selecione o item Generate from DataBase e clique em Next; Na janela Choose Your Data Connection do assistente clique no botão New Connection; Na janela Connection Properties clique no botão Change...; Na janela Change Data Source selecione o Data Source MySQL DataBase e clique em OK; A seguir define as propriedades de conexão para o seu banco de dados MySQL. No meu caso os valores são: Server name = localhost User name = root Password = ** Feito isso já poderemos selecionar o banco de dados Cadastro no MySQL e clicar em OK; De volta a janela do assistente Entity Data Model(EDM) marque a opção Yes e clique em Next; Agora selecione as tabela desejada e clique em Finish. Ao final teremos as entidades criada no descrito Entity Data Model(EDM);

Boas Christiane...

Valeu a resposta, infelizmente essa não é a solução do meu problema. Pois essa já sabia.

A minha questão é, como utilizar o CodeFirst (criando migrações), com uma nova base de dados MySQL em vez de SQL Server como foi demostrado nas aulas?

Consegui resolver a questão da migrações, mas estou com um problema no seed.

protected override void Seed(MyApp.UI.MyContext context)
        {
            String new_password = SecurityHelper.HashSHA512("admin");
            context.Utilizadores.AddOrUpdate(new Utilizador { NomeCompleto = "Administrador do Sistema", NomeUtilizador = "admin", PalavraPasse = new_password });
            //context.SaveChanges();
        }

O que acontece é que sempre que executo a aplciação ele adiciona um novo utilizador.

como fazer para que o novo utilizador seja adicionado apenas se se tratar de uma nova instalação?

solução!

Olá Patrício

Para resolver seu problema, você pode utilizar uma outra versão do AddOrUpdate que recebe um lambda que devolve qual é a chave que o EntityFramework deve considerar para fazer o Update http://msdn.microsoft.com/en-us/library/hh846514(v=vs.103).aspx. Supondo que o seu utilizador tenha um nome único, podemos utilizar a seguinte chamada:

context.Utilizadores.AddOrUpdate(utilizador => utilizador.NomeUtilizador, new Utilizador { NomeCompleto = "Administrador do Sistema", NomeUtilizador = "admin", PalavraPasse = new_password });

A versão que você utilizou no código tenta procurar a chave primária do objeto que foi passado dentro do banco de dados, mas como a entidade passada não possui o campo de chave preenchido, o EntityFramework assume que o objeto é novo e por isso faz um insert.

muito obrigado resolveu o meu problema.