如何在asp.net MVC 5中动态设置ConnectString的名称

时间:2015-11-09 04:51:56

标签: c# visual-studio asp.net-mvc-5 connection-string

我有一个connectionString,如下所示:

 <add name="EDentalCADBContext" connectionString="data source=*.*.*.*\SQLEXPRESS;Initial Catalog=*******;User id=*****;Password=******;" providerName="System.Data.SqlClient" />

我动态创建了相同的ConnectionString,但是我无法在上面设置ConnectionString的名称,例如name =“EDentalCADBContext”。

如何动态设置名称?

由于

5 个答案:

答案 0 :(得分:0)

我同意上面的@Dai。如果您在代码中动态创建它,那么放入配置包装器的重点是什么。为什么不直接使用它?整个界面的重点是从常见的.config文件中读取内容。

然而, 是可能的。创建ConnectStringSettings实例时,在构造函数中传递'name'和'connectionString':https://msdn.microsoft.com/en-us/library/wd8h82yf(v=vs.110).aspx

答案 1 :(得分:0)

在你的评论中,你写了

  

我不想使用web.config中的ConnectionString。我是动态创建的。所以我需要设置名称以匹配DBContext

解决方案不匹配DbContext期望的“魔术字符串”(我想这是在Visual Studio中使用EF向导时指定的),而是使用接受的DbContext构造函数原始连接字符串:

String connectionString = "server=dbserver.local;Integrated Security=SSPI;...";
using( DbContext db = new DbContext( connectionString ) ) {
    // do stuff
}

答案 2 :(得分:0)

 EDentalCADBContext context = new EDentalCADBContext();

  public ActionResult Masters(int? pageNumber, string tableName)
                {
                    EstablishConnection(); // This creates the connection with DB dynamically.


                    int? page = 1;
                    ViewData["MenuItems"] = MenuItem.ActivateMenu("Masters");
                    ViewData["Users"] = context.Users.ToList();
        }

     public class EDentalCADBContext : DbContext
        {
           // public EDentalCADBContext() : base("EDentalCADBContext") { }
            public DbSet<NotificationItem> NotificationItems { get; set; }
            public DbSet<User> Users { get; set; }

期待连接字符串的EDentalCADBContext名称。它为什么要匹配?

答案 3 :(得分:0)

我在黑暗中刺伤而不知道你的其余代码是如何工作的。但是你让我试试,所以这是我最好的去...

如果你有自己的继承自DbContext的自定义类,那么你必须实现自己的构造函数来接受连接字符串。您无法继承非默认构造函数。所以我在下面修改了你的类,让一个构造函数接受字符串:

public class EDentalCADBContext : DbContext {
    public DbSet<NotificationItem> NotificationItems { get; set; }
    public DbSet<User> Users { get; set; }

    public EDentalCADBContext(string connectionNameOrString) :
        base(connectionStringOrName) {
    }
}

你会像这样实例化:

EDentalCADBContext context = new EDentalCADBContext("literal conn string");
// Perhaps comes from sqlBuilder.ConnectionString per your comments?

答案 4 :(得分:0)

public EDentalCADBContext(string con = null)
    : base(string.IsNullOrEmpty(con) ? "name=EDentalCADBContext" : con)
{



}

在您的EDentalCADBContext上下文课程中 然后,当您实例化此EDentalCADBContext时,您将连接字符串作为参数传递。 防爆。 EDentalCADBContext db = new EDentalCADBContext(连接字符串);