DbContext的用法(string nameOrConnectionString)

时间:2015-05-19 08:03:02

标签: c# sql-server entity-framework

我想使用构造函数

建立数据库连接

DbContext(string nameOrConnectionString)

但我不想使用应用程序配置文件。像这样

配置文件中的行

  <add name="DBEntities" connectionString="metadata=res://*/DB.csdl|
    res://*/DB.ssdl|res://*/DB.msl;provider=System.Data.SqlClient;
    provider connection string=&quot;data source=SERVER;
    initialcatalog=DB;persist security info=True;
    user id=XXX;password=YYY;MultipleActiveResultSets=True;
    App=EntityFramework&quot;" 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=&quot;
 data source=SERVER;initial catalog=DB;
persist security info=True;
userid=XXX;password=YYY;MultipleActiveResultSets=True;
App=EntityFramework&quot;"){}

如果我这样做,我有'System.ArgumentException':不支持关键字:'connectionstring'。

有可能吗?怎么做我想要的?

3 个答案:

答案 0 :(得分:6)

这个问题似乎有两个方面:

  1. 您已在连接字符串
  2. 中包含属性名称connectionString
  3. “需要用'
  4. 替换

    然后应该成为正确的代码:

    public DBEntities()
        : base("metadata=res://*/DB.csdl|res://*/DB.ssdl|res://*/DB.msl;provider=System.Data.Sq‌​‌​lClient;provider connection string='data source=SERVER;initial catalog=DB;persist security info=True;userid=XXX;password=YYY;MultipleActiveResultSets=True;App=EntityFramew‌​‌​ork'")
    {}
    

    您可以查看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)
{
}