Где хранится база данных LocalDB?
Я хотел протестировать несколько подходов при создании приложения (сначала БД, сначала Модель, сначала код). После использования T4Scaffolding и множества проблем с пост-модификациями БД, EF был недостаточно гибок. Теперь я нашел очень странную вещь. Я оставил единственное DefaultConnection, указанное в Web.Config и указывающее на один файл.mdf в папке App_Data решения. Используя подход Code-First, я создал свои сущности (классы), затем создал репозитории, контекст, все, кажется, работает почти нормально, за исключением того, что я получаю даже данные, которые были сохранены до того, как я "удалил" и обновил БД. Но после проверки в VS Server Explorer база данных содержит только таблицы, используемые для идентификации (пользователи, роли), и это показывает, что фактическая база данных находится где-то еще. Я подозреваю, что это находится в 'C:\Users{MyUser}\AppData\Local\Microsoft\Microsoft SQL Server Локальная БД \Instances'. Но я не могу открыть.mdf файлы оттуда, чтобы проверить, так как они уже используются. Я застрял. Где мои данные???
Забыл упомянуть, что у меня в приложении два контекста, поэтому в консоли PM я получаю предупреждение: "В сборке обнаружено более одного типа контекста...".
Однако первый - это ApplicationDbContext, и он относится только к Identity DB:
public class ApplicationUser : IdentityUser
{
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
}
и второй контекст связан с этим единственным подключением к БД из Web.Config, и он имеет объекты бизнес-логики
1 ответ
Это немного странно. Строки подключения выбираются из Web.Config и должны быть там. Пожалуйста, перепроверьте. Также по умолчанию EF создает базу данных в папке App_Data. Таким образом, вы можете искать эту папку. Также в случае, если вам неудобно работать с несколькими контекстами, вы можете просто скопировать все DbSets в ApplicationDbContext, и он должен работать нормально.
Изменить: вы можете указать тот же CS для вашего другого контекста, как:
namespace MvcProject
{
public class NorthwindDb : DbContext
{
public NorthwindDb() :
base("DefaultConnection") {}
}
}
Здесь при вызове конструктора базового класса мы можем передать имя строки подключения. По умолчанию Identity использует DefaultConnection, и мы можем установить это в нашем контексте.