Estou usando o Entity Framework 4 com a abordagem Model First.
Iniciei o projeto, desenhei as entidades e gerei o banco de dados. Tudo funcionou bem.
Então eu precisei voltar e adicionar outra entidade ao meu modelo. No entanto, conforme arrasto uma entidade para o EDMX, recebo este erro:
Tudo bem! Eu só preciso mapear Entity1 para uma tabela .. Mas hey! Estou usando a abordagem Model First, espero que ele crie a tabela para mim quando gerar o DDL.
Como faço para contornar esse erro?
.net
entity-framework
entity-framework-4
André Pena
fonte
fonte
Respostas:
Isso ocorre devido à maneira como o EF4 trabalha com o modelo primeiro.
Quando você cria um modelo primeiro, ele está em um estado em que o SSDL não existe. Você pode arrastar entidades, associá-las e assim por diante e ainda, se você der uma olhada no SSDL no arquivo EDMX, você verá que nenhuma das entidades tem uma tabela de armazenamento associada no SSDL.
Isso muda quando você clica no
Generate Database From Model
item do menu de contexto. A parte confusa é que essa ação faz mais do que simplesmente gerar um script DDL. Na verdade, ele altera o arquivo EDMX para incluir informações SSDL. Deste ponto em diante, o arquivo EDMX entrará em um estado em que cada entidade no designer / CSDL deve ser mapeada para uma entidade no SSDL. Se um não mapear, ocorrerá um erro em tempo de compilação:Outro fato interessante é que não é o tipo de erro que impede a compilação. Ele irá, de fato, gerar a biblioteca de classes de saída. Não deveria ser um aviso ou algo assim?
Para evitar esse erro, tudo o que você precisa fazer após inserir uma nova entidade é
Generate Database From Model
novamente. Isso atualizará o SSDL e corrigirá os mapeamentos.EDITAR
Se você não estiver usando o modelo primeiro e "atualizar do banco de dados", também terá esse erro no caso de excluir uma tabela no servidor de banco de dados. Isso ocorre porque o Entity Framework não excluirá automaticamente a entidade para você. Exclua a entidade manualmente e o erro desaparecerá.
fonte
Descobri que estava recebendo o mesmo erro porque tinha esquecido de criar uma restrição referencial depois de criar uma associação entre duas entidades.
fonte
Se você estiver desenvolvendo um modelo com o Entities Framework, poderá encontrar este erro irritante às vezes:
Isso pode não fazer sentido quando tudo parece bem no EDM, mas é porque esse erro geralmente não tem nada a ver com o EDM. O que deveria dizer é "regenerar seus arquivos de banco de dados".
Veja, o Entities verifica o SSDL e o MSL durante a compilação, então se você apenas mudou seu EDM, mas não usa Gerar Modelo de Banco de Dados ... então ele reclama que há algo faltando em seus scripts sql.
então, em resumo, a solução é: "Não se esqueça de gerar o modelo de banco de dados todas as vezes após atualizar seu EDM se estiver fazendo o primeiro desenvolvimento do modelo. Espero que seu problema seja resolvido".
fonte
No meu caso, outro desenvolvedor removeu algumas das tabelas do banco de dados subjacente. Quando percebi isso e removi essas tabelas da entidade, o problema foi resolvido. Não era tão óbvio quanto parece.
fonte
Encontrei o mesmo erro, mas não estava usando o modelo primeiro. Acontece que, de alguma forma, meu arquivo EDMX continha uma referência a uma tabela, embora ela não tenha aparecido no designer. Curiosamente, quando fiz uma pesquisa de texto pelo nome da tabela no Visual Studio (2013), a tabela não foi encontrada.
Para resolver o problema, usei um editor externo (Notepad ++) para encontrar a referência à tabela incorreta no arquivo EDMX e, em seguida, (cuidadosamente) removi todas as referências à tabela. Lamento dizer que não sei como o arquivo EDMX chegou a esse estado em primeiro lugar.
fonte
Eu tive uma mudança de tabela e ela criou outra entidade com um número 1 no final (como
MyEntity1
e aMyEntity
), conforme confirmado pelo navegador de modelo edmx. Algo sobre as duas entidades juntas confundiu o processamento.A remoção da tabela e a readição corrigiu-a.
Observe que se o TFS estiver conectado, faça um check-in do edmx após a exclusão. Então, e somente então, pegue o mais recente e adicione-o novamente em um processo definido de duas etapas. Caso contrário, o TFS se confunde com a exclusão e a adição das mesmas entidades nomeadas, o que parece causar problemas.
fonte
Uma maneira mais rápida para mim foi excluir as tabelas e adicioná-las novamente. Ele os mapeou automaticamente. :)
fonte
Para aqueles que estão usando a
Database First
abordagem, tudo o que você precisa fazer após inserir uma nova entidade éGenerate Database From Model
clicar novamente com o botão direito no seu.edmx
arquivo e selecionarGenerate Database From Model...
fonte
Tive esse erro quando excluí uma tabela do banco de dados. Resolvido clicando com o botão direito no diagrama EDMX, indo para Propriedades, selecionando a tabela da lista na janela Propriedades e excluindo-a (usando a tecla delete) do diagrama.
fonte
Search within file content
eSearch External Files
remova todas as linhas de códigos que fazem referência à entidade ausente. Eles ficarão assim:
Este erro é comum em tabelas excluídas do banco de dados.
Quando alguém elimina uma tabela no banco de dados, ou apenas altera o
web.config.connectionStrings
para o banco de dados EF Mapped, para apontar para um novo e não aquele usado para gerar os mapeamentos originais é o problema.É esse novo banco de dados que essas entidades com o erro 3027 não estão presentes.
fonte
Ocorreu um erro ao tentar criar um resultado personalizado para um procedimento armazenado e presumi que deveria ser uma entidade.
A solução foi que acabei de criar um tipo complexo no navegador do modelo e atribuí-lo como resultado às "Importações de função de edição".
Vou adicioná-lo aqui, pois parece que essa pergunta é para onde o Google o levará quando você receber esse erro.
fonte
Eu havia configurado tudo corretamente (cardinalidades e propriedades dependentes), mas não conseguia descobrir por que continuo recebendo erros. Finalmente descobri que, EF gerou uma coluna na tabela dependente por conta própria (table_tablecolumn) e não tem nenhuma relação com a tabela, então nenhum mapeamento foi especificado. Tive que deletar a coluna no arquivo EDMX e reconstruir a solução que corrigiu o problema. Estou usando a abordagem DB.
fonte
Atualizar o modelo do banco de dados não funciona para mim.
Tive que remover a entidade em conflito, executar Atualizar modelo do banco de dados e, por último, reconstruir a solução. Depois disso, tudo funciona bem.
fonte
Compartilhando isso com outras pessoas. No meu caso, estávamos trabalhando em uma solução MVC compartilhada e usando um módulo comum para tabelas que usamos para dropdowns. Recebi o erro quando atualizei o modelo de entidade adicionando uma nova tabela. Acontece que quando atualizei o EDMX, ele provavelmente atualizou meus direitos de acesso no banco de dados, o que resultou em não ter acesso àquela determinada tabela que me fornecia
no mapping specified
.Apenas adicionar novamente e dar acesso ao meu usuário resolveu o problema.
fonte
Acho que entendi isso por não excluir explicitamente algumas tabelas do edmx antes de renomeá-las e adicioná-las novamente. Em vez disso, apenas renomeei as tabelas e, em seguida, fiz um Update Model from Database, pensando que iria eliminá-las e excluí-las do modelo. Em seguida, fiz outro modelo de atualização do banco de dados e adicionei as tabelas renomeadas.
O site estava funcionando com as novas tabelas, mas ocorreu o erro. Eventualmente, percebi que as tabelas originais ainda estavam no modelo. Eu os apaguei do modelo (clique neles na tela edmx, tecla delete), e então o erro foi embora.
fonte