Код структуры Entity Framework сначала не создает базу данных
Я создал класс контекста db и добавил строку подключения в свой файл web.config, как указано в Scott Guthrie Code First Development с Entity Framework 4. Я запускаю его из тестового метода. Я получил несколько ошибок базы данных, выполняющих тесты, но когда я, наконец, очистил классы, чтобы тест прошел успешно, у меня все еще не было базы данных в папке App_data.
Я добавил Database.CreateIfNotExists() в конструктор dbContext, но все еще не sdf файл. Кто-нибудь знает, что я делаю неправильно?
Ответы
Ответ 1
Для того, чтобы база данных была автоматически создана, имя строки подключения должно быть названо в точности как имя подкласса DbContext (с пространством имен).
Eg. Скажите, что ваш класс DB выглядит следующим образом:
namespace MyNamespace
{
public class FooDb : DbContext
{
public DbSet<XXX> ABC{ get; set; }
}
}
Строка подключения должна выглядеть так:
<connectionStrings>
<add name="MyNamespace.FooDb" connectionString="Data Source=|DataDirectory|MyNamespace.FooDb.sdf" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
Ответ 2
Проверить SQL Server Management Studio → .\sqlexpress
То, где CF помещало все мои базы данных, когда я не указываю строку подключения.
Ответ 3
См. здесь для автоматического создания .sdf с EF 4.1 и пакета SQL CE NuGet (или, возможно, нового проекта MVC 3):
http://www.goatly.net/2011/6/27/entity-framework-code-first-the-path-is-not-valid-check-the-directory-for-the-database.aspx
Короче говоря: Создайте пустую папку App_Data - файл sdf будет создан автоматически, но только если папка, в которую она входит, присутствует.
Ответ 4
Убедитесь, что ваш dbcontext использует правильную строку подключения
Что-то похожее на это
public class DBContext : IdentityDbContext<ApplicationUser>
{
public DBContext ()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
}
И в web.config
<add name="DefaultConnection" connectionString="Server=....;Connection Timeout=300;" providerName="System.Data.SqlClient" />