EF中, DbContext 使用连接串连接oracle数据库问题

xkmxjx 2017-11-16 10:48:57
web.config中:
-----------------------
<add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=test;Password=oracle;Data Source=orcl" />

我的DbContext:
----------------------
public class MyContext: DbContext
{
public MyContext()
//这样没问题
// : base("OracleDbContext")

//但如果直接指定连接串, 在串中无法指定ProviderName(无法识别), 如果像下面这样只提供连接串部分,系统就会出错, EF会默认使用SQLServer Provider, 具体错误信息见后面
:base("User Id = test; Password=oracle;Data Source =' localhost:1521/ct;provider=Oracle.ManagedDataAccess.Client'")
{ }
....
}

错误信息: SqlException: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接)
-------------------------
这说明EF会默认使用SQLServer访问数据库, 请问我该如何配置base()中的连接串呢呢?
...全文
919 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣殿骑士18 2019-02-28
  • 打赏
  • 举报
回复
引用 3 楼 xkmxjx 的回复:
咖啡猫,你说的这个我明白, 但我现在需要动态指定连接串来选择不同数据库,还有什么好办法吗?


2楼方法是正解。所谓:
动态的指定连接串,和给你10个预置连接串,你动态的选取某一连接串。效果有什么不同吗?

==========
欢迎关注微信公众号 “产品技术知与行” ,打造全面的结构化知识库,包括原创文章、免费课程(C#,Java,Js)、技术专题、视野知识、源码下载等内容。
最新文章:解读经典《C#高级编程》 第四章之 泛型的原理 https://mp.weixin.qq.com/s/3264VdbzqXWt7vn19ARrPQ

洛叶无心 2019-02-28
  • 打赏
  • 举报
回复
没人啊,顶一下
xkmxjx 2017-11-17
  • 打赏
  • 举报
回复
// 参数: // nameOrConnectionString: // Either the database name or a connection string. [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] public DbContext(string nameOrConnectionString); 按照DbContext的声明, 连接串可以是别名, 也可以是具体的数据库连接串, 但如果我使用连接串: "User Id=test;Password=oracle;Data Source=orcl" 时, EF会并不会识别出当前数据库时oracle( 因为其中没有指定数据库ProviderName ), 而会默认使用sqlserver 作为上下文环境 但如果我把 providerName="Oracle.ManagedDataAccess.Client" 也放入连接串中的话, 系统就好报错, 无法识别 providerName
xkmxjx 2017-11-17
  • 打赏
  • 举报
回复
咖啡猫,你说的这个我明白, 但我现在需要动态指定连接串来选择不同数据库,还有什么好办法吗?
xkmxjx 2017-11-17
  • 打赏
  • 举报
回复
没人啊,顶一下
q107770540 2017-11-17
  • 打赏
  • 举报
回复
<connectionStrings>
    <add name="SQLServer" connectionString="Server=localhost; Database=MyDb; User ID=MyUser;Password=MyPwd;Pooling=false" providerName="System.Data.SqlClient" />
    <add name="Oracle" connectionString="Data Source=localhost:1521/XE;Persist Security Info=True;User ID=MyUser;Password=MyPwd;" providerName="Oracle.ManagedDataAccess.Client"/>
</connectionStrings>
<appSettings>
    <add key="DefaultConnection" value="Oracle" />
</appSettings>

public MyDbContext()
    : base("DefaultConnection")
{

}
refer: https://stackoverflow.com/questions/7894086/how-to-set-manually-an-oracle-connection-string-in-a-dbcontext/18710419#18710419
xkmxjx 2017-11-16
  • 打赏
  • 举报
回复
没有人这么用过吗?

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧