Можно ли создать базу данных (Sql Server compact) по заданному пути, если мы используем Entity Framework с подходом, основанным на коде? - PullRequest
3 голосов
/ 18 сентября 2011

Я немного запутался в Entity Framework, я хотел бы использовать подход, основанный на коде;На самом деле, я хотел бы написать, как составляются мои таблицы базы данных через определение класса.

Основная проблема заключается в том, что мне нужно создать базу данных (или открыть ее), динамически выбирая ее путь (пользователь может выбрать, какую базу данныхоткрывать и создавать новые, когда захочет).Я выбрал Sql server compact для достижения этой цели, однако я все еще не понимаю, как использовать подход с первым кодом для этой ситуации, потому что я не понимаю, как выбрать, где база данных должна быть создана с подходом с первым кодом, если этовозможно.

Может кто-нибудь объяснить, что я делаю неправильно, и предложить другой маршрут, если таковой имеется?Спасибо

1 Ответ

8 голосов
/ 18 сентября 2011

У меня была такая же проблема несколько дней назад.Вот как я заставил его работать:

В коде запуска вашего приложения добавьте следующее:

using System.Data.Entity.Database;

// ...

DbDatabase.SetInitializer(new MyDbInitializer());
DbDatabase.DefaultConnectionFactory = new SqlCeConnectionFactory(
    "System.Data.SqlServerCe.4.0", 
    @"C:\Path\To\", 
    @"Data Source=C:\Path\To\DbFile.sdf");

Инициализатор должен выглядеть примерно так:

using System.Data.Entity.Database;

public class MyDbInitializer : CreateDatabaseIfNotExists<MyDbContext>
{
    protected override void Seed(MyDbContext context)
    {
        // create some sample data
    }
}

Если CreateDatabaseIfNotExists - это не то, что вам нужно, есть другие виды инициализаторов, которые вы можете использовать, или вы также можете создать свой собственный.Более подробную информацию об этом можно найти здесь:

http://blog.oneunicorn.com/2011/03/31/configuring-database-initializers-in-a-config-file/

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...