Как сохранить базу данных выбранную директорию EF
Что мне нужно сделать: допустим пользователь выбрал куда сохранить файл с помощью класса SaveFileDialog,как мне сгенерировать базу данных по этому пути.
Note: Не могу понять почему при генерации базы данных программа подвисает.
Моя сущность для генерации базы данных Article:
public class Article
{
public int Id { set; get; }
public string Title { get; set; }
public string Text { get; set; }
public string Image { get; set;
public Article() { }
public Article(string title, string text, string image)
{
Title = title;
Text = text;
Image = image;
}
}
ArticleContext
public class ArticleContext : DbContext
{
public ArticleContext() : base("DBConnect") { }
public DbSet<Article> Articles { get; set; }
public static void Save<T>(List<T> item) where T : class
{
using (var db = new ArticleContext())
{
db.Set<T>().AddRange(item);
db.SaveChanges();//Сохраняем все изменения, сделанные в базовой базе данных.
}
}
}
DBConnect-страка полученыя к бд
<connectionStrings>
<add name="DBConnect"
connectionString="data source=(localdb)\MSSQLLocalDB;Initial Catalog=ParserHabr;Integrated Security=True;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
Ответы (1 шт):
Класс DbContext имеет конструктор, принимающий параметр nameOrConnectionString. То есть в него можно передавать непосредственно строку соединения.
Чтобы им воспользоваться, сделайте в своём классе ArticleContext конструктор с аналогичным параметром:
public class ArticleContext : DbContext
{
public ArticleContext(string connectionString) : base(connectionString) { }
// ...
}
Получив имя файла из SaveFileDialog:
string filename = saveFileDialog.FileName;
используем его для конструирования строки соединения. Чтобы не допустить ошибок экранирования и т. п., применим класс SqlConnectionStringBuilder.
var builder = new SqlConnectionStringBuilder();
builder.DataSource = @"(localdb)\MSSQLLocalDB";
builder.IntegratedSecurity = true;
builder.AttachDBFilename = filename;
builder.InitialCatalog = Path.GetFileNameWithoutExtension(filename);
string connectionString = builder.ToString();
Создаём контекст с этой строкой соединения:
var context = new ArticleContext(connectionString);