Como faço para passar uma string de conexão para o DbContext codificado pela estrutura da entidade? Minha geração de banco de dados funciona corretamente quando DbContext e a string de conexão em web.config estão no mesmo projeto e são nomeados da mesma forma. Mas agora preciso mover o DbContext para outro projeto, então estou testando a passagem de uma string de conexão para ele da seguinte maneira:
Modelo e Contexto
public class Dinner
{
public int DinnerId { get; set; }
public string Title { get; set; }
}
public class NerdDinners : DbContext
{
public NerdDinners(string connString)
: base(connString)
{
}
public DbSet<Dinner> Dinners { get; set; }
}
Açao
public ActionResult Index()
{
var db = new NerdDinners(ConfigurationManager.ConnectionStrings["NerdDinnerDb"].ConnectionString);
var dinners = (from d in db.Dinners
select d).ToList();
return View(dinners);
}
Web.Config
<connectionStrings>
<add name="NerdDinnerDb" connectionString="Data Source=|DataDirectory|NerdDinners.sdf" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
Se eu definir um ponto de interrupção na ação e analisar o db
, a string de conexão está lá, mas não cria ou encontra o banco de dados ou nada.
Ocorreu um erro relacionado à rede ou específico da instância ao estabelecer uma conexão com o SQL Server. O servidor não foi encontrado ou não estava acessível. Verifique se o nome da instância está correto e se o SQL Server está configurado para permitir conexões remotas. (provedor: Provedor de Pipes Nomeados, erro: 40 - Não foi possível abrir uma conexão com o SQL Server)
fonte
Respostas:
Um pouco tarde para o jogo aqui, mas outra opção é:
fonte
Manual changes to this file will be overwritten if the code is regenerated.
no cabeçalho, então alguém pode querer implementar isso em uma classe parcial de acordo com Classes e métodos parciais (Guia de programação C #)Depois de ler a documentação, preciso passar o nome da string de conexão:
fonte
Pensei em adicionar este trecho para pessoas que procuram "Como passar uma string de conexão para um DbContext": você pode construir uma string de conexão para seu armazenamento de dados subjacente e passar toda a string de conexão para o construtor do seu tipo derivado de DbContext .
(Reutilizando o código do @Lol Coder) Modelo e contexto
Então, digamos que você construa uma string de conexão Sql usando o SqlConnectioStringBuilder da seguinte maneira:
Onde o método GetConnectionString constrói a string de conexão apropriada e o SqlConnectionStringBuilder garante que a string de conexão esteja sintaticamente correta; você pode então instanciar seu conetxt db assim:
fonte
public TestAppContext() : base("Data Source=server.company.com;Initial Catalog=SomeDB;Integrated Security=True") { }
Em seu DbContext, crie um construtor padrão para seu DbContext e herde a base desta forma:
fonte
MyConnectionString
... (sim, a string de conexão existe). Eu tenho que colocarname=MyConnectionString
.Se você estiver construindo a string de conexão dentro do aplicativo, você deve usar o comando connString. Se você estiver usando uma string de conexão na configuração da web. Então você usa o "nome" dessa string.
fonte
Eu tenho um pequeno exemplo de solução para esse problema.
MyDBContext.cs
MyClass.cs
frmMyForm.cs
fonte
Verifique a sintaxe da string de conexão no web.config. Deve ser algo como
ConnectionString="Data Source=C:\DataDictionary\NerdDinner.sdf"
fonte
Ao usar um modelo EF, tenho uma string de conexão em cada projeto que consome o modelo EF. Por exemplo, eu tenho um modelo EF EDMX em uma biblioteca de classes separada. Eu tenho uma string de conexão no meu projeto web (mvc) para que ele possa acessar o banco de dados EF.
Eu também tenho outro projeto de teste de unidade para testar os repositórios. Para que os repositórios acessem o banco de dados EF, o arquivo app.config do projeto de teste tem a mesma string de conexão.
As conexões de banco de dados devem ser configuradas, não codificadas, IMO.
fonte
Não consigo ver nada de errado com seu código, eu uso SqlExpress e funciona bem quando uso uma string de conexão no construtor.
Você criou uma pasta App_Data em seu projeto, não é?
fonte
Para qualquer um que veio aqui tentando descobrir como definir a string de conexão dinamicamente e teve problemas com as soluções acima (como "O formato da string de inicialização não está de acordo com a especificação começando no índice 0") ao configurar a string de conexão no construtor. Veja como consertar:
fonte
a partir daqui
note que você pode precisar adicionar
Microsoft.EntityFrameworkCore.SqlServer
fonte