entity framework运行时连接字符串
我想在运行时为我的数据库提供连接字符串。 我正在使用entity framework。 这就是我到目前为止所拥有的
class MyClassDBContext:DbContext { public MyClassDBContext(string str) : base(str) { this.Database.Connection.ConnectionString = str; } }
要使用上面的代码,我试过了
//create connection string EntityConnectionStringBuilder myConn = new EntityConnectionStringBuilder(); myConn.Provider = "System.Data.SqlClient"; myConn.ProviderConnectionString = "user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30"; //inject the connection string at runtime MyClassDBContext a = new MyClassDBContext(myConn.ToString())
上面的代码给了我一个错误,说“不支持Provider关键字”。 为了尝试调试此错误,我尝试了以下操作
MyClassDBContext a = new MyClassDBContext("metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30")
现在,我收到一条错误消息“不支持元数据关键字”。 所以我将代码更改为
MyClassDBContext a = new MyClassDBContext("provider=System.Data.SqlClient;provider connection string=user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30")
现在我收到错误提示“不支持提供商关键字”。 所以我再次将我的代码更改为
MyClassDBContext a = new MyClassDBContext("user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30")
现在它的工作原理! 我的问题是:如何在运行时指定提供程序和元数据? 看起来只接受连接字符串。 我正在使用Nuget的Entity 4.3.1。
谢谢
基于edmx文件的EF需要“提供者”和“元数据”内容。 基于代码优先的EF不需要这样,只需要常规连接字符串。 如果您愿意,可以使用SqlConnectionBuilder
(而不是EntityConnectionStringBuilder
)来构建此正常连接字符串。 但正如您所见,您只需指定实际的连接详细信息。 EF 4.3.1的DbContext Code-first范例中不需要Provider和Metadata。
EntityConnectionStringBuilder类可用于在运行时指定提供程序和元数据
例如
var entityConnectionStringBuilder = new EntityConnectionStringBuilder(); entityConnectionStringBuilder.Provider =“System.Data.SqlClient”; entityConnectionStringBuilder.Metadata =“res:// /Example.csdl|res:// /Example.ssdl|res://*/Example.msl”;
有关元数据中的CSDL,SSDL和MSDL的更多信息,请参阅
以HatSoft的答案为基础 :
var entityConnectionStringBuilder= new EntityConnectionStringBuilder(); entityConnectionStringBuilder.Provider = "System.Data.SqlClient"; entityConnectionStringBuilder.ProviderConnectionString = ; entityConnectionStringBuilder.Metadata = "res://*"; MyClassDBContext a = new MyClassDBContext(entityConnectionStringBuilder.ToString());
我按照这个链接
还有这一个
如何在没有app.conf文件的情况下使用EF Code-First?
基本上我所做的几乎就像你一样,用字符串创建一个构造函数并调用基数。
但我也在这个构造函数中设置了提供程序。
这是一个例子
public Context(string ConnectionString) : base(ConnectionString) { Database.DefaultConnectionFactory = new SqlCeConnectionFactory("Oracle.DataAccess.Client"); }
这样您就可以指定提供者。 并且您不会收到提供程序关键字错误,因为您不需要在连接字符串中指定
这是我如何称呼它。
var dbCont = new ClassLibrary1.Models.Context("DATA SOURCE=xxx;PASSWORD=xxx;USER ID=xxx");
希望这有助于我花很长时间才能找到它
这是一个古老的问题,但也许对某人有用
上述就是C#学习教程:entity framework运行时连接字符串分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
var provider = (DbProviderFactory)System.Data.Entity.DbConfiguration .DependencyResolver .GetService(typeof(DbProviderFactory), "invariant provider name"); var conn = provider.CreateConnection(); //conn.ConnectionString = "sample connection string"; DbInterception.Dispatch.Connection.SetConnectionString(conn, new DbConnectionPropertyInterceptionContext() .WithValue("sample connection string")); return new SampleDbContext(conn,true);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1013179.html