De repente, eu continuo MetadataException
instanciando minha ObjectContext
classe gerada . A cadeia de conexão no App.Config parece correta - não mudou desde a última vez que funcionou - e tentei regenerar um novo modelo (arquivo edmx) do banco de dados subjacente sem alterações.
Alguém tem alguma ideia?
Mais detalhes: não alterei nenhuma propriedade, não alterei o nome de nenhum assembly de saída, não tentei incorporar o EDMX no assembly. Eu apenas esperei 10 horas saindo do trabalho até voltar. E então não estava mais funcionando.
Eu tentei recriar o EDMX. Eu tentei recriar o projeto. Eu até tentei recriar o banco de dados, do zero. Sem sorte, qualquer que seja.
c#
.net
entity-framework
ado.net
J. Steen
fonte
fonte
Respostas:
Isso significa que o aplicativo não pode carregar o EDMX. Existem várias coisas que podem causar isso.
Em resumo, não há detalhes suficientes na sua pergunta para fornecer uma resposta precisa, mas espero que essas idéias o levem ao caminho certo.
Atualização: escrevi uma postagem no blog com etapas mais completas para solução de problemas .
fonte
Essa pequena mudança ajuda com esse problema.
Tenho solução com 3 projetos.
mudar para
fonte
Você pode obter essa exceção quando o Edmx está em um projeto e o está usando em outro.
O motivo é
Res://*/
um uri que aponta para recursos na montagem ATUAL. Se o Edm estiver definido em um assembly diferente do código que está sendo usado, res: // * / não funcionará porque o recurso não pode ser encontrado.Em vez de especificar '*', é necessário fornecer o nome completo do assembly (incluindo o token de chave pública). Por exemplo:
Uma maneira melhor de construir cadeias de conexão é com EntityConnectionStringBuilder:
Se você ainda encontrar a exceção, abra a montagem no refletor e verifique os nomes dos arquivos para os arquivos .csdl, .ssdl e .msl. Quando os recursos tiverem nomes diferentes dos especificados no valor dos metadados, não funcionará.
fonte
res://MyAssembly/folder.<filename>.csdl...
Eu tive um erro semelhante. Eu recriei o projeto (história longa) e retirei tudo do projeto antigo. Eu não tinha percebido que meu modelo estava em um diretório chamado 'Model' antes e agora estava em um diretório chamado 'Models'. Depois que mudei a conexão no meu Web.Config a partir disso:
para isso:
Tudo funcionou (alterado
Model
paraModels
). Note que eu tive que mudar esses três lugares nessa string.fonte
E uma maneira rápida de verificar o nome do modelo sem o Reflector .... procure o diretório
e verifique se os arquivos de recurso .csdl, .msl e .ssdl estão lá. Se eles estiverem em um subdiretório, o nome do subdiretório deverá ser anexado ao nome do modelo.
Por exemplo, meus três arquivos de recursos estão em um subdiretório Data , portanto, minha cadeia de conexão teve que ser
(versus metadados = res: //*/MyModel.csdl | res: //*/MyModel.ssdl | res: //*/MyModel.msl;).
fonte
Eu também tive esse problema e foi porque a cadeia de conexão no meu web.config era um pouco diferente da do app.config do assembly em que meu EDMX está localizado. Não faço ideia por que mudou, mas aqui estão as duas versões diferentes.
App.config:
Web.config:
O que o corrigiu foi simplesmente copiar a string app.config (observe a pequena diferença no final - em vez de "
App=EntityFramework
" ele queria "application name=EntityFramework
") para o web.config e o problema foi resolvido. :)fonte
The .NET Framework data provider for SQL Server (SqlClient) supports many keywords from older APIs, but is generally more flexible and accepts synonyms for many of the common connection string keywords.
as seqüências de conexão do Entity Framework não compartilham essa flexibilidade, portanto, você deve usar apenas as palavras-chave que espera.Isso aconteceu comigo quando alternei acidentalmente a ação de compilação do arquivo edmx (exibida em Propriedades no IDE) de 'EntityDeploy' para 'None'. EntityDeploy é o que preenche os metadados para você: consulte http://msdn.microsoft.com/en-us/library/cc982037.aspx
fonte
Isso acontece comigo quando eu não limpo a solução antes de criar um novo designer .edmx. Portanto, não esqueça de limpar a solução antes de criar o novo designer .edmx. Isso me ajuda a pular muito mais problemas com este. Abaixo os detalhes de navegação fornecidos, caso você seja novo no visual studio.
Espero que isto ajude. Obrigado a todos
fonte
Passei apenas 30 minutos felizes com isso. Eu havia renomeado o objeto de entidades, renomeado a entrada no arquivo de configuração, mas há mais ... você também precisa alterar a referência ao csdl
muito fácil de perder - se você estiver renomeando, certifique-se de obter tudo ....
fonte
Eu tive o mesmo problema. Eu olhei em minha dll cumprida com refletor e vi que o nome do recurso não estava certo. Eu renomeei e parece bom agora.
fonte
Para o meu caso, é resolvido alterando as propriedades do arquivo edmx.
isso resolveu o problema para mim. O problema é que, quando o contêiner tenta encontrar os metadados, ele não pode encontrá-lo. simplesmente faça-o na mesma montagem. esta solução não funcionará se você tiver seus arquivos edmx em outro assembly
fonte
Passei um dia inteiro nesse erro
se você estiver trabalhando com
n-tear architecture
ou você tentou
separate Models
gerar peloEDMX
formulário DataAccessLayer paraDomainModelLayer
talvez você receba esse erro
webconfig (UILayer)
eappconfig (DataAccessLayer)
são os mesmosSegundo, o que é muito importante
connection string
qual é o problema
de onde eu cheguei
Model
ou qualquer outra coisa .csdl na minha cadeia de conexão onde eles estãoaqui eu nossa solução olhar para a foto
espero que a ajuda você
fonte
Consegui resolver isso no Visual Studio 2010, VB.net (ASP.NET) 4.0.
Durante o assistente de modelo de entidade, você poderá ver a cadeia de conexão da entidade. A partir daí, você pode copiar e colar em sua cadeia de conexão.
A única coisa que me faltava era o "App_Code". na cadeia de conexões.
fonte
Após horas pesquisando e tentando resolver, nenhuma das soluções sugeridas funcionou. Eu listei várias soluções aqui. Também notei o que funcionou para mim. (Eu estava usando o EF versão 6.1.1 e o SQL Server 2014 - mas um banco de dados mais antigo)
connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;
(esses são arquivos. Para vê-los, você pode alternar Mostrar todos os arquivos no Solution Explorer, no diretório ~ / obj / ..)... e muitas outras que eu tentei [como: reverter a versão do EntityFramework para uma versão posterior (não tenho certeza)]
o que funcionou para mim:
deste artigo aqui , me ajudou a resolver meu problema. Acabei de alterar meu
ProviderManifestToken="2012"
paraProviderManifestToken="2008"
no arquivo EDMX. Para fazer isso:Solution Explorer
Espero que ajude.
fonte
Se você estiver usando o edmx de um projeto diferente, na cadeia de conexão, altere ...
...para...
fonte
folder.subfolder
antes dele.A solução definitiva (mesmo depois de recriar o banco de dados em duas outras máquinas, bem como no EDMX e em outros artigos diversos) foi não usar a primeira edição do Entity Framework. Ansioso para avaliá-lo novamente no .NET 4.0.Depois de encontrar o mesmo problema novamente e procurar por toda a resposta, finalmente encontrei alguém que tinha o mesmo problema. Parece que a cadeia de conexão não foi gerada corretamente pelo assistente do Visual Studio e o link para os recursos de metadados estava faltando um caminho importante.
v1.0 BUG ?: Não foi possível carregar o recurso de metadados especificado. Scripts! = Modelos
Atualização 2013-01-16 : Após a transição para o uso quase exclusivo das práticas do EF Code First (mesmo com bancos de dados existentes), esse problema não é mais um problema. Para mim, essa foi uma solução viável para reduzir a confusão de códigos e configurações gerados automaticamente e aumentar meu próprio controle sobre o produto.
fonte
Meu problema e solução, os sintomas eram os mesmos "Não foi possível carregar o recurso de metadados especificado", mas a causa raiz foi diferente. Eu tinha 2 projetos na solução, um era o EntityModel e o outro, a solução. Na verdade, eu excluí e recriei o arquivo EDMX no EntityModel.
A solução foi que eu tive que voltar ao projeto de aplicativo da Web e adicionar essa linha ao arquivo de configuração. O novo modelo havia alterado alguns itens que precisavam ser duplicados no arquivo Web.Config do "outro" projeto. A configuração antiga não era mais boa.
fonte
Às vezes, vejo esse erro no meu projeto. Eu resolvo isso
1 - Clique com o botão direito no arquivo EDMX
2 - Selecione a
Run Custom Tool
opção3 - Projeto de reconstrução
fonte
No meu caso, esse problema estava relacionado à renomeação do arquivo edmx do meu modelo ... a correção da cadeia de conexão app.config dos arquivos csdl / ssdl / msl corrigiu meu problema.
Se você estiver usando o designer EF 4.0 para gerar seu csdl / ssdl / msl, esses 3 "arquivos" serão realmente armazenados no arquivo edmx principal do modelo. Nesse caso, o post de Waqas está praticamente em jogo. É importante entender que "Model_Name" no exemplo dele precisará ser alterado para qualquer que seja o nome atual do arquivo .edmx do seu modelo (sem o .edmx).
Além disso, se o seu arquivo edmx não estiver no nível raiz do seu projeto, você deverá preceder Model_Name com o caminho relativo, por exemplo
especificaria que o xml csdl / ssdl / msl é armazenado no arquivo de modelo 'WidgetModel.edmx', que é armazenado em uma pasta chamada 'MyModel'.
fonte
Eu escrevi essa classe auxiliar para criar instâncias de objetos ObjectContext quando eles são definidos em um projeto diferente do que o projeto que está usando. Analiso a cadeia de conexão no arquivo de configuração e substituo '*' pelo nome completo do assembly.
Não é perfeito porque usa reflexão para construir o objeto, mas é a maneira mais genérica de fazer isso que eu poderia encontrar.
Espero que ajude alguém.
fonte
Para todos vocês
SelftrackingEntities
usuários, se você seguiu o Microsoft Walk-through e separou a classe de contexto Object no projeto de serviço wcf (vinculando-o ao contexto .tt), esta resposta é para você:parte das respostas mostradas neste post que inclui códigos como:
NÃO FUNCIONARÁ PARA VOCÊ !! o motivo é que
YourObjectContextType.Assembly
agora reside em um Assembley diferente (dentro da montagem do projeto wcf),Então você deve substituir
YourObjectContextType.Assembly.FullName
por ->diverta-se.
fonte
Eu estava tendo problemas com essa mesma mensagem de erro. Meu problema foi resolvido fechando e reabrindo o Visual Studio 2010.
fonte
Teve o mesmo problema porque renomeei um assembly.
Eu também tive que renomeá-lo nos atributos AssemblyTitle e AssemblyProduct no projeto Properties / AssemblyInfo.cs, além de excluir e adicionar novamente a referência ao arquivo edmx.
Então funcionou muito bem.
fonte
Com o mesmo problema, recriei o edmx a partir do banco de dados. Resolve meu problema.
fonte
A exceção ocorre porque o compilador aponta para metadados inexistentes, apenas copie o
app.config
connectionstring para oWeb.config
ConnectionStringfonte
Eu também tive o mesmo problema e solução de Rick, exceto que estava importando um .edmx existente para um novo projeto e, embora o namespace base não importasse, ele foi importado para um subdiretório diferente, então eu também tive que atualizar a conexão string dentro do Web.Config em três locais, para incluir os diferentes nomes de subdiretórios:
fonte
Eu tive o mesmo problema com uma solução que continha projetos em uma pasta de soluções, quando eles foram movidos para a raiz da solução (para superar uma falha suspeita no Mvc3AppConverter devido aos locais do projeto).
Embora a solução tenha sido compilada depois que todas as * referências do projeto foram adicionadas, conforme necessário, o erro foi gerado quando o site foi acionado.
O EDMX está em um dos projetos que foram movidos (o projeto 'Data'), mas é claro que a falta de uma referência ao projeto Data não causou um erro de compilação, apenas um erro em tempo de execução.
Simplesmente adicionar a referência ausente ao projeto principal resolveu esse problema, sem a necessidade de editar a conexão.
Espero que isto ajude alguém.
fonte
Quanto a mim, eu tinha separado a camada de acesso a dados e a camada de interface do usuário. Então, eu tenho uma string de conexão de entidade para cada camada.
Antes de modificar essas duas seqüências de conexão separadas para serem as mesmas, ainda encontrei o erro abaixo.
Então, eu faço para ser as mesmas seqüências de conexão para essas duas camadas (DAL, UI), funciona perfeitamente.
Minha solução é fazer com que todas as cadeias de conexão sejam as mesmas, independentemente de onde elas já sejam apresentadas .
fonte
Eu tive esse problema ontem e estava olhando para o meu código na depuração e na saída do SQL Profiler.
O que eu não conseguia entender, antes de ler e entender esta postagem, era o motivo pelo qual o EntityFramework estava lançando esse erro ao chamar o banco de dados. Eu estava olhando centenas de linhas no SQL Profiler tentando descobrir o que havia de errado com o modelo de banco de dados. Não consegui encontrar nada parecido com a ligação que esperava e, para ser sincero, não tinha certeza do que estava procurando.
Se você estiver nesta posição, verifique a cadeia de conexão. Meu palpite é que, antes que o EntityFramework crie seu SQL, ele verificará o modelo, especificado na parte de metadados da cadeia de conexão. No meu caso, estava errado. O EntityFramework nem chegou a chegar ao DB.
Verifique se os nomes estão corretos. Depois que eu resolvi isso, eu estava vendo chamadas no SQL Profiler onde o ApplicationName era 'EntityFramework', com o SQL chamando as tabelas esperadas.
fonte
Um arquivo app.config ou web.config ruim pode fazer isso. Eu copiei a cadeia de conexão app.config para o meu web.config na minha interface do usuário e acabei inserindo:
fonte