一尘不染

将连接字符串传递给代码优先的DbContext

c#

如何将连接字符串传递给实体框架的代码优先DbContext?当DbContext和web.config中的连接字符串位于同一项目中且以相同的方式命名时,我的数据库生成正常工作。但是现在我需要将DbContext移到另一个项目,因此我正在测试将连接字符串传递给它,如下所示:

模型与背景

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; }
}

行动

    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配置

<connectionStrings>
  <add name="NerdDinnerDb" connectionString="Data Source=|DataDirectory|NerdDinners.sdf" providerName="System.Data.SqlServerCe.4.0"/>    
</connectionStrings>

如果我在操作中设置了一个断点,则分析db,连接字符串在那里,但是它不会创建或找到数据库或任何东西。

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并且已将SQL
Server配置为允许远程连接。(提供者:命名管道提供程序,错误:40-无法打开与SQL Server的连接)


阅读 350

收藏
2020-05-19

共1个答案

一尘不染

阅读文档后,我必须改为传递连接字符串的名称:

var db = new NerdDinners("NerdDinnerDb");
2020-05-19