在EF 6.1中创建具有特定名称和文件位置的新数据库

时间:2014-05-24 16:39:43

标签: entity-framework-6.1

我正在为我的应用程序创建一个小的db bootstraping实用程序。我需要从我的模型类创建一个数据库,但我希望能够设置数据库文件名和位置。

如果我执行默认的DbContext实例化 - 它将尝试创建名为DataAccessModule.DbContext的Db,并且DataBase文件(mdf和ldf)将位于Program Files \ SQL ...文件夹中。我需要使用我的名字创建数据库(由用户在bootstraping应用程序的UI中输入)以及位于用户所选文件夹中的mdf和ldf文件。

我该怎么做?

1 个答案:

答案 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

但是,您必须确保,如果用户指定了文件夹,则必须具有该文件夹的读/写权限。