c#mysql连接字符 编码,c# - 将连接字符串传递给代码优先的DbContext

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

如何将连接字符串传递给实体框架的代码优先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 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中

如果我在操作中设置断点,请分析db,连接字符串就在那里,但它不会创建或查找数据库或任何内容。

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

9个解决方案

73 votes

比赛有点晚了,但另一个选择是:

public class NerdDinners : DbContext

{

public NerdDinners(string connString)

{

this.Database.Connection.ConnectionString = connString;

}

public DbSet Dinners { get; set; }

}

Bitfiddler answered 2019-05-07T22:28:12Z

55 votes

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

var db = new NerdDinners("NerdDinnerDb");

Shawn Mclean answered 2019-05-07T22:28:35Z

36 votes

以为我会为那些寻找“如何将连接字符串传递给DbContext”的人添加此位:您可以为基础数据存储区构造连接字符串,并将整个连接字符串传递给从DbContext派生的类型的构造函数。

(从@Lol Coder重新使用代码)型号&上下文

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 Dinners { get; set; }

}

然后,假设您使用SqlConnectioStringBuilder构造一个Sql连接字符串,如下所示:

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(GetConnectionString());

GetConnectionString方法构造适当的连接字符串,SqlConnectionStringBuilder确保连接字符串语法正确; 然后你可以像这样实例化你的db conetxt:

var myContext = new NerdDinners(builder.ToString());

dotnetguy answered 2019-05-07T22:29:20Z

26 votes

在你的DbContext中,为你的DbContext创建一个默认构造函数,并像这样继承基类:

public myDbContext()

: base("MyConnectionString") // connectionstring name define in your web.config

{

}

Kinh Pham answered 2019-05-07T22:29:43Z

2 votes

如果您在应用程序中构建连接字符串,那么您将使用connString命令。 如果您在Web配置中使用连接字符串。 然后使用该字符串的“名称”。

MKunstman answered 2019-05-07T22:30:07Z

1 votes

检查web.config中连接字符串的语法。 它应该像ConnectionString="Data Source=C:\DataDictionary\NerdDinner.sdf"

kmerkle answered 2019-05-07T22:30:31Z

1 votes

使用EF模型时,每个项目中都有一个使用EF模型的连接字符串。 例如,我在一个单独的类库中有一个EF EDMX模型。 我的web(mvc)项目中有一个连接字符串,以便它可以访问EF db。

我还有另一个用于测试存储库的单元测试项目。 为了使存储库访问EF db,测试项目的app.config文件具有相同的连接字符串。

应该配置数据库连接,而不是编码,IMO。

danludwig answered 2019-05-07T22:31:08Z

1 votes

我有一个针对该问题的解决方案示例。

MyDBContext.cs

public MyDBContext(DBConnectionType ConnectionType) //: base("ConnMain")

{

if(ConnectionType==DBConnectionType.MainConnection)

{

this.Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnMain"].ConnectionString;

}

else if(ConnectionType==DBConnectionType.BackupConnection)

{

this.Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnBackup"].ConnectionString;

}

}

MyClass.cs

public enum DBConnectionType

{

MainConnection=0,

BackupConnection=1

}

frmMyForm.cs

MyDBContext db = new MyDBContext(DBConnectionType.MainConnection);

//or

//MyDBContext db = new MyDBContext(DBConnectionType.BackupConnection);

Durgesh Pandey answered 2019-05-07T22:31:51Z

0 votes

看不到你的代码有什么问题,我使用SqlExpress,当我在构造函数中使用连接字符串时它工作正常。

你在项目中创建了一个App_Data文件夹,不是吗?

Lee Smith answered 2019-05-07T22:32:22Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值