我有一个connectionString,如下所示:
<add name="EDentalCADBContext" connectionString="data source=*.*.*.*\SQLEXPRESS;Initial Catalog=*******;User id=*****;Password=******;" providerName="System.Data.SqlClient" />
我动态创建了相同的ConnectionString,但是我无法在上面设置ConnectionString的名称,例如name =“EDentalCADBContext”。
如何动态设置名称?
由于
答案 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(连接字符串);