我正在为我的应用程序创建一个小的db bootstraping实用程序。我需要从我的模型类创建一个数据库,但我希望能够设置数据库文件名和位置。
如果我执行默认的DbContext实例化 - 它将尝试创建名为DataAccessModule.DbContext的Db,并且DataBase文件(mdf和ldf)将位于Program Files \ SQL ...文件夹中。我需要使用我的名字创建数据库(由用户在bootstraping应用程序的UI中输入)以及位于用户所选文件夹中的mdf和ldf文件。
我该怎么做?
答案 0 :(得分:0)
您需要构建一个这样的连接字符串:
SqlConnectionStringBuilder sqlBldr = new SqlConnectionStringBuilder();
sqlBldr.DataSource = "Server name";
sqlBldr.InitialCatalog = "Database name";
sqlBldr.IntegratedSecurity = true; // or use use + password
sqlBldr.MultipleActiveResultSets = true;
EntityConnectionStringBuilder entBldr = new EntityConnectionStringBuilder();
entBldr.ProviderConnectionString = sqlBuilder.ToString();
entBldr.Metadata = "res://*/";
entBldr.Provider = "System.Data.SqlClient";
EF连接字符串为entityBuilder.ToString()
。您只需在DbContextBuilder
中使用它即可。公开接收一个参数的继承构造函数:
public class MyDbContext
{
public MyDbContext(strinc connStr)
: base(connStr)
{
}
// ...
}
然后像这样使用它:
string connectionString = // ... use your connection string builder for this
using(MyDbContext ctx = new MyDbContext(connectionString))
{
// ...
}
用于选择文件名和位置
请注意,您可以在.mdf
属性的AttachDBFilename属性中指定SqlConnectionStringBuilder
文件的完整路径,而不是使用server + database。有关详细信息,请参阅SqlConnectionStringBuilder MSDN docs。
但是,您必须确保,如果用户指定了文件夹,则必须具有该文件夹的读/写权限。