Касательно дублирования моделей.
В свое время я сталкивался с такой же проблемой: одни и те же модели описаны в реляционной БД, в серверном коде и даже на клиенте. Соответственно, если меняем БД, нужно вносить изменения в остальные части проекта.
В итоге остановился на том, что моделей вообще не должно быть нигде, кроме как в БД. Сейчас БД содержит метаданные, в которых описаны таблицы бизнес-логики (доменная область) и по этим метаданным клиент и сервер создают объекты, для которых раньше приходилось вручную декларировать классы моделей.
То есть мне комфортнее работать с database first архитектурой. Но часто наоборот: модели описываются в серверном коде и переносятся в базу при помощи ORM.