Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Если не устраивают конвенции по умолчанию, расскажите лучше как их переопределить.
public class UniversityContext : DbContext { public UniversityContext() : base("UniversityContext") { } public DbSet<Course> Courses { get; set; } public DbSet<Enrollment> Enrollments { get; set; } public DbSet<Student> Students { get; set; } }
DbSet<T> в виде свойств. И никто никогда не объясняет, зачем они нужны, и что будет, если их убрать.System.Data.Entity.DropCreateDatabaseIfModelChanges<UniversityContext>
Во-первых, к существующей базе данных подобный подход применить сложно.
есть так называемые конвенции, что, допустим, property который называется Id, будет по умолчанию преобразован в Primary Key таблицы
Ну и вообще, использовать такие инициализаторы при наличии миграций…
Почему?
Ну и да, это не разработка баз данных никаких боком, это разработка DAL-слоя.
Для прототипов инициализатор вполне сойдет.
Как минимум потому что придется писать уродливые мапинги на существующие таблицы.
Суть в том, что до появления реальных данных в Code First база — побочный продукт.
Вот только вы нигде не пишете, почему этот инициализатор нельзя применять в продуктивном коде. И вообще не объясняете, что он делает.
А зачем — а зачем вообще использовать Code First?
Заметим, я не говорю о переводе готового приложения, я говорю о работе с существующей БД, это не одно и то же.
(д) в норме у запускаемого приложения не должно быть прав на дроп БД.
(ц) создание БД может быть долгим процессом
(б) данные и объекты, которые вообще не описаны в CF
Если вы не поняли, я говорил про девелопера, а не про приложение.
Для среднестатистической CRUD аппликации он не будет долгим.
Ага, значит один объект мы из кода добавляем из кода в базу, а второй из базы в код.
Девелоперу зачем «полезные данные»?
Чтобы чай попить, пока апликация грузится?
Я уже молчу, что если вы базу с продукции девелоперам ставите, то вам любой аудит по пальцам надает, мало не покажется.
Как минимум потому что придется писать уродливые мапинги на существующие таблицы. Все можно сделать, вопрос — зачем.
DbSet<T> в виде свойств. И никто никогда не объясняет, зачем они нужны, и что будет, если их убрать.«Все данные» — это только про «дропнута», или и про «создана заново»?
Seed.А зачем они нужны и что будет, если их убрать?
context.Courses. Проблема этого подхода в том, что он осмысленен очень непродолжительное время, и как только мы начинаем либо трактовать контекст как совсем низкоуровневый доступ, скрывая его за отдельным репозиторием (в этом случае достаточно публичного Set<T>), либо трактовать его как готовый репозиторий (в этом случае наружу выставляются сразу готовые методы Get, Find и так далее, а внутри, в общем-то, тоже достаточно Set<T>). Проще говоря, у этого интерфейса неадекватный уровень абстракции.OnModelCreating.
Разработка баз данных с Code First