我想使用构造函数
建立数据库连接DbContext(string nameOrConnectionString)
但我不想使用应用程序配置文件。像这样
配置文件中的行
<add name="DBEntities" connectionString="metadata=res://*/DB.csdl|
res://*/DB.ssdl|res://*/DB.msl;provider=System.Data.SqlClient;
provider connection string="data source=SERVER;
initialcatalog=DB;persist security info=True;
user id=XXX;password=YYY;MultipleActiveResultSets=True;
App=EntityFramework"" providerName="System.Data.EntityClient" />
和代码行
public DBEntities() : base("name=DBEntities"){}
instate我想直接在代码中找到这样的东西
public DBEntities() : base("connectionString=metadata=
res://*/DB.csdl|res://*/DB.ssdl|res://*/DB.msl;
provider=System.Data.SqlClient;provider connection string="
data source=SERVER;initial catalog=DB;
persist security info=True;
userid=XXX;password=YYY;MultipleActiveResultSets=True;
App=EntityFramework""){}
如果我这样做,我有'System.ArgumentException':不支持关键字:'connectionstring'。
有可能吗?怎么做我想要的?
答案 0 :(得分:6)
这个问题似乎有两个方面:
connectionString
然后应该成为正确的代码:
public DBEntities()
: base("metadata=res://*/DB.csdl|res://*/DB.ssdl|res://*/DB.msl;provider=System.Data.SqlClient;provider connection string='data source=SERVER;initial catalog=DB;persist security info=True;userid=XXX;password=YYY;MultipleActiveResultSets=True;App=EntityFramework'")
{}
您可以查看here以获取连接字符串所包含元素的更多详细信息,并查看here以获取有关实体框架连接字符串的更多详细信息。
旧答案,供参考:
问题似乎是你包含web.config用来定义连接字符串的所有内容。连接字符串本身只是在属性connectionString之后的引号之间包含的内容,在您的情况data source=SERVER;initial catalog=DB;persist security info=True;userid=XXX;password=YYY;MultipleActiveResultSets=True;App=EntityFramework
中。
请改为尝试:
public DBEntities() : base("data source=SERVER;initial catalog=DB;
persist security info=True;
userid=XXX;password=YYY;MultipleActiveResultSets=True;
App=EntityFramework"){}
此外,您可以查看here以获取连接字符串所包含元素的更多详细信息。
答案 1 :(得分:2)
在Model.Context.tt
中,在构造函数下添加以下内容;
public <#=code.Escape(container)#>(string connStr)
: base(connStr)
{
<#
if (!loader.IsLazyLoadingEnabled(container))
{
#>
this.Configuration.LazyLoadingEnabled = false;
<#
}
foreach (var entitySet in container.BaseEntitySets.OfType<EntitySet>())
{
// Note: the DbSet members are defined below such that the getter and
// setter always have the same accessibility as the DbSet definition
if (Accessibility.ForReadOnlyProperty(entitySet) != "public")
{
#>
<#=codeStringGenerator.DbSetInitializer(entitySet)#>
<#
}
}
#>
}
重建后,您现在将有第二个构造函数采用string
参数connStr
;
public DBEntities() : base("name=DBEntities"){}
public DBEntities(string connStr) : base(connStr){}
您现在可以在代码中创建自己的连接字符串并将其传递给构造函数。实施例;
public string connStr = "your connection string";
using (var db = new DBEntities(connStr))
{
//do things with db
}
答案 2 :(得分:0)
问题在于您的连接字符串是否传递给构造函数。 试试这个:
private const string _connectionString = @"data source=SERVER;initial catalog=DB;persist security info=True;user id=XXX;password=YYY;MultipleActiveResultSets=True";
public DBEntities() : base(_connectionString)
{
}