Estou usando a estrutura de entidade e o ASP.NET MVC 4 para criar um aplicativo
Minha solução é dividida em dois projetos;
- Uma biblioteca de classes que inclui meu arquivo de modelo de dados (.edmx) e algumas interfaces personalizadas
- O projeto MVC 'container' que referencia a biblioteca de classes acima
Meu problema é que quando eu tentar usar o 'MyEntites' DbContext eu recebo o seguinte erro:
Não foi encontrada nenhuma cadeia de conexão chamada 'MyEntities' no arquivo de configuração do aplicativo.
Eu acho que o problema tem algo a ver com o fato de que a cadeia de conexão está dentro do app.config da biblioteca de classes e não no projeto MVC.
Alguém tem alguma sugestão?
c#
entity-framework
asp.net-mvc-4
jjc99
fonte
fonte
PM> Update-Database -Verbose Using StartUp project 'xxxxx.Web.Home'. Using NuGet project 'xxxxx.Web.Home.Dal'. Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Target database is: 'MovieDatabase-0.0.2' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration).
Respostas:
Tente copiar a sequência de conexões para o arquivo .config no projeto MVC.
fonte
Você está certo, isso acontece porque a biblioteca de classes (onde o arquivo .edmx) não é seu projeto inicial / principal.
Você precisará copiar a cadeia de conexão no arquivo de configuração do projeto principal.
Caso seu projeto de inicialização / principal não tenha um arquivo de configuração (como no meu caso de aplicativo de console), basta adicionar um (projeto de inicialização - Adicionar novo item -> arquivo de configuração do aplicativo).
Informações mais relevantes podem ser encontradas aqui: MetadataException: Não foi possível carregar o recurso de metadados especificado
fonte
certifique-se de fazer seu projeto (com o DbContext) como inicialização
OU
Adicione ao projeto definido como inicialização sua cadeia de conexão no app.config (ou web.config)
OU
Chame o comando como este
Update-Database -Script -ProjectName '<project name>' -StartupProjectName '<project name>' -ConnectionString 'data source=.;initial catalog=<db name>;integrated security=True;MultipleActiveResultSets=True' -ConnectionProviderName 'System.Data.SqlClient'
Então tente novamente
fonte
Set as Startup Project
- conforme a captura de tela mostrada acima. (embora se você bater F5, você não seria capaz de iniciar a biblioteca de classes)Você pode simplesmente passar a cadeia de conexão
EntityFramework
e seguir com sua vida:fonte
Como você supõe, isso tem a ver com a cadeia de conexão estar no app.config da biblioteca de classes.
Copie a entrada da classe app.config para o contêiner
app.config
ouweb.config
arquivofonte
Se você tiver vários projetos em solução, configure o projeto como iniciado, onde você tem seu App.config verdade.
fonte
copie a seqüência de conexão
app.config
ouweb.config
arquivo no projeto definido como "Definir comoStartUp
projeto" e, no caso de usar a estrutura de entidades no projeto da camada de dados - instale o nuget da estrutura de entidades no projeto principal.fonte
Isso também acontece se o projeto de inicialização for alterado para o que não possui as cadeias de conexão .
fonte
Certifique-se de adicionar as cadeias de conexão após a
entityFramework
seção:fonte
Sim, é bobagem. Você pode evitar copiar a cadeia de conexão usando um construtor de conexões. Código VB.Net (usado na produção, mas ligeiramente modificado aqui, portanto, trato como não testado, prazer em ajudar com qualquer problema), onde eu tenho uma variável serverName, uma variável databaseName, eu as passo em um método e gero a conexão para mim:
fonte
você está usando mais de um projeto em sua solução?
Porque se você estiver, a configuração da web que você deve verificar é a do mesmo projeto que o arquivo de .edmx
fonte
Adicionar ConnectionString ao arquivo MVC Project Web.config
fonte
Eu tive esse problema ao usar vários projetos, o projeto inicial com web.config e app.config para o projeto EntityFramework.
para evitar esse problema, você deve:
fonte
Eu enfrentei o mesmo problema. Não foi possível colocar a cadeia de conexão no projeto de inicialização, pois estou executando a operação de acesso a dados de outra camada. Além disso, se você não tiver o app.config no seu projeto de inicialização, adicione o arquivo app.config e, em seguida, adicione uma cadeia de conexão ao arquivo de configuração.
fonte
Consegui isso por não ter o projeto definido como inicialização, conforme indicado por outra resposta. Minha contribuição para isso - ao fazer Add-Migrations e Update-Database, especifique o projeto de inicialização como parte do comando no Nuget Package Manager Console (não inclua os caracteres '[' ou ']' ', apenas para mostrar que você precisa alterar o texto localizado lá para o nome do seu projeto):
Isso deve resolver.
fonte
Isso ocorre porque sua classe de contexto está sendo herdada do DbContext. Eu acho que o seu ctor é assim:
name=...
deve ser alterado para o nome da sua connectionStringfonte
A cadeia de conexão gerada pelo projeto que contém o arquivo .edmx gera a cadeia de conexão, isso parece ser uma retenção dos tipos de arquivos app.config que foram copiados para o diretório de saída e referenciados pelo executável para armazenar informações de configuração de tempo de execução.
Isso é interrompido no projeto da web, pois não há processo automático para adicionar informações aleatórias .config ao arquivo web.config do projeto.
O mais fácil é copiar a cadeia de conexão do arquivo de configuração para a seção de conexões do arquivo web.config e desconsiderar o conteúdo do arquivo de configuração.
fonte
A melhor maneira que acabei de encontrar para resolver isso é definir temporariamente esse projeto (provavelmente uma biblioteca de classes) para o projeto de inicialização. Isso força o console do gerenciador de pacotes a usar esse projeto como fonte de configuração. parte da razão pela qual é configurada dessa maneira é por causa do modelo descendente que os arquivos econfig geralmente seguem. A regra geral é que o projeto mais próximo do cliente (aplicativo MVC, por exemplo) é o web.config ou app.config que será usado.
fonte
Verifique se você inseriu a string de conexão no ROOT web.config do projeto de inicialização.
Eu sei que estou dizendo o óbvio aqui, mas aconteceu comigo também - embora eu já tivesse a string de conexão no Web.Config do meu projeto MVC (o arquivo .edmx foi colocado em um projeto diferente da biblioteca de classes) e não consegui descubra por que continuo recebendo uma exceção ... Para encurtar a história, copiei a cadeia de conexão para o Views \ Web.Config por engano, em uma estranha combinação de cansaço e não rolar para o fundo da tela. O cenário do explorador de soluções. Sim, essas coisas também acontecem com desenvolvedores veteranos :)
fonte
Esse problema ocorre quando você está usando Camadas em seu Projeto e define ou instala o trabalho de quadro de Entidade no DataLayer e tenta executar seu Projeto
Portanto, para superar esse problema, copie a string de conexão da camada em que o arquivo Edmx está lá e cole a string de conexão no web.config principal.
fonte
Adicione uma cadeia de conexão no arquivo raiz web.config do projeto MVC 'container' que referencia a biblioteca de classes da seguinte maneira:
Se você não quiser usar "MyEntities" como nome da conexão, altere-o como desejar, mas faça a seguinte alteração na classe MyEntities DbContext:
O motivo desse erro é: Se não especificarmos o nome da cadeia de conexão ou conectar a cadeia na classe derivada de DbConext (no seu caso, é MyEntities), o DbContext procurará automaticamente uma cadeia de conexão no arquivo raiz web.config, cujo nome é igual ao nome da classe derivada (no seu caso, são Minhas Entidades).
fonte
Eu tive esse problema ao executar o MSTest. Não consegui fazê-lo funcionar sem a bandeira "noisolation".
Espero que isso ajude alguém. Me custou muito tempo para descobrir isso. Tudo correu bem a partir do IDE. Algo estranho sobre o Entity Framework neste contexto.
fonte
Migrações regulares
Existem duas opções - a primeira que todos sugeriram é garantir que a cadeia de conexão esteja no arquivo Web.config do projeto. Ao trabalhar com cadeias de conexão nas configurações de aplicativos do Azure, isso significa substituir os valores Web.config pelos valores do Azure.
Migrações do Azure ou automáticas (programática)
Existe uma segunda opção disponível se você estiver executando migrações programaticamente, que permite executar migrações usando uma cadeia de conexão obtida dinamicamente (ou através das configurações de aplicativos do Azure) sem armazená-la no Web.config:
Ao definir o TargetDatabase da configuração , use o construtor DbConnectionInfo que usa uma cadeia de conexão e um nome de provedor em vez do construtor que usa apenas um nome de conexão. Se a cadeia de conexão não tiver um nome de provedor e você estiver usando o SQL Server / Azure SQL, use "System.Data.SqlClient"
fonte
Isso também pode resultar em referências de DLL insuficientes sendo referenciadas no código de chamada. Um pequeno truque desajeitado pode salvar seu dia.
Eu estava seguindo a abordagem do DB First e havia criado o arquivo EDMX no projeto da biblioteca da classe DAL, e isso referia-se à biblioteca da classe BAL, que por sua vez foi referenciada por um serviço WCF.
Desde que eu estava recebendo esse erro no BAL, tentei o método mencionado acima para copiar os detalhes de configuração do App.config do projeto DAL, mas não resolvi. Por fim, com a dica de um amigo, acabei de adicionar um arquivo EDMX fictício ao projeto WCF (com DB Connectivity relevante etc.), para que ele importasse tudo o necessário e, em seguida, apenas apaguei o arquivo EDMX, e ele se livrou do problema com uma construção limpa.
fonte
Há um comentário na resposta principal de @RyanMann que sugere:
Esta é uma sugestão fantástica!
Também funciona para compartilhar cadeias de conexão entre os arquivos App.config e Web.config!
Qualquer pessoa que queira seguir esta sugestão, deve seguir para esta resposta do SO . Ele tem um ótimo guia passo a passo sobre o compartilhamento de cadeias de conexão entre vários projetos em uma solução.
A única ressalva é que
configSource
deve existir no mesmo diretório ou subdiretório. O link acima explica como usar "Adicionar como link" para contornar isso.fonte
Eu tive esse erro ao tentar usar o EF dentro de um plugin do AutoCAD. Os plug-ins de CAD obtêm a cadeia de conexão do arquivo acad.exe.config. Adicione a string de conexão conforme mencionado acima ao arquivo de configuração do acad e ele funcionará.
O crédito vai para Norman.Yuan da ADN.Network.
fonte
Se você estiver usando um modelo MVVM, tente copiar as seqüências de conexão para todas as partes do seu projeto.
Por exemplo, se sua solução contiver dois projetos, o projeto da biblioteca de classes e o projeto wpf, copie as seqüências de conexão do projeto de back-end (porject da classe de biblioteca) e coloque uma cópia no arquivo App.config do projeto wpf.
Espero que seja útil para você :)
fonte
Adicionar Connectoinstrnig no arquivo web.config
fonte