Не имеет значения, используете ли вы стандартную разработку приложений в стиле WPF или шаблон MVVM, если у вас есть отдельный слой данных.
Ваш уровень данных должен скрывать всю логику реализации БД, включая создание БД, от остальной части вашего кода.
Вы можете реализовать его, используя шаблон Repository, но, пока он предоставляет известный интерфейс и определения для объектов данных, которые требуются вашей бизнес-логике, с вами все должно быть в порядке.
Обратите внимание, что объекты данных, используемые другими уровнями кода, не обязательно должны быть такими же, как объекты POCO, используемые БД.
Если ваш уровень данных доступен для класса Singleton, который реализует интерфейс уровня, то вы можете автоматически вызывать код создания БД, если БД не может быть найдена при вызове DataLayer.Instance
(например).
Важно помнить, что только внутренняя работа уровня данных должна знать, откуда поступают данные из остальной части вашего кода, и не зависит от БД, заботясь только о том, что у него есть нужные данные, а не откуда они поступают. .
Что касается практичности вот ссылка, которая дает пример Code First с EF.