将连接string传递给代码优先的DbContext
如何将连接string传递给entity framework的代码优先DbContext? 如果DbContext和web.config中的连接string在同一个项目中并且命名方式相同,则我的数据库生成工作正常。 但现在我需要将DbContext移动到另一个项目,所以我testing传递一个连接string,如下所示:
模型和上下文
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.Config中
<connectionStrings> <add name="NerdDinnerDb" connectionString="Data Source=|DataDirectory|NerdDinners.sdf" providerName="System.Data.SqlServerCe.4.0"/> </connectionStrings>
如果我在动作中设置了一个断点分析db
,连接string在那里,但它不创build或find数据库或任何东西。
与SQL Serverbuild立连接时发生networking相关或特定于实例的错误。 服务器未find或无法访问。 validation实例名称是否正确,并将SQL Serverconfiguration为允许远程连接。 (提供程序:命名pipe道提供程序,错误:40 – 无法打开连接到SQL Server)
这里比赛稍晚,但另一个select是:
public class NerdDinners : DbContext { public NerdDinners(string connString) { this.Database.Connection.ConnectionString = connString; } public DbSet<Dinner> Dinners { get; set; } }
阅读文档后,我必须传递连接string的名称:
var db = new NerdDinners("NerdDinnerDb");
我想添加这一点的人谁来寻找“如何传递连接string到DbContext”:您可以为您的基础数据存储构造一个连接string,并将整个连接string传递给您的types从DbContext派生的构造函数。
(从@Lol编码器重新使用代码) 模型和上下文
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; } }
然后,假设您使用SqlConnectioStringBuilder构build一个Sql连接string,如下所示:
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(GetConnectionString());
GetConnectionString方法构造适当的连接string,并且SqlConnectionStringBuilder确保连接string在语法上是正确的; 你可能会这样实例化你的db conetxt:
var myContext = new NerdDinners(builder.ToString());
在你的DbContext中,为你的DbContext创build一个默认的构造函数并inheritance这个基础:
public myDbContext() : base("MyConnectionString") // connectionstring name define in your web.config { }
如果你在应用程序中构build连接string,那么你会使用你的connString命令。 如果您在Webconfiguration中使用连接string。 然后你使用该string的“名称”。
检查web.config中连接string的语法。 它应该是像ConnectionString="Data Source=C:\DataDictionary\NerdDinner.sdf"
在使用EF模型时,每个项目中都有一个使用EF模型的连接string。 例如,我在一个单独的类库中有一个EF EDMX模型。 我在我的网站(mvc)项目中有一个连接string,以便它可以访问EF数据库。
我还有另一个testing版本的unit testing项目。 为了使存储库访问EF数据库,testing项目的app.config文件具有相同的连接string。
DB连接应该被configuration,而不是编码,IMO。
无法看到您的代码有什么问题,我使用SqlExpress,并且在构造函数中使用连接string时,它工作正常。
你已经在你的项目中创build了一个App_Data文件夹,不是吗?