Моя команда использует первый дизайн Db. Мы создаем базу данных, затем создаем модель с помощью команды Scaffold-DbContext.
Проблема в том, что нам нужно изменить модель, а затем воссоздать ее.
public partial class UserInfo
{
public int Id { get; set; }
[Required]
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public DateTime RecordCreated { get; set; }
}
После вызова Scaffold-DbContext с помощью -Force он удалит из него [Required].
Стоит ли мне использовать ViewModel, создавать частичные классы или что?
Очень рано использовать EF core 2.1, поэтому любая помощь будет принята с благодарностью.
Джо





Я понимаю, что сначала была создана БД, но после первоначального создания моделей, если вы вносите изменения в модель до изменений в БД, было бы лучше создать миграции из кода, таким образом, все изменения в моделях будут реплицированы в базу данных.
Тогда да, частичные классы - это способ пойти или наследование модели, где базовая модель будет в одном месте, а унаследованная модель, которая такая же, но с атрибутами, и все находится в другой папке, поэтому каркас не сжимает ее. Также вы можете использовать отображение из постоянного репозитория моделей в модели для представлений. Вот хорошая ссылка для начала c-sharpcorner.com/article/…
Используйте EF Core Power Tools, он генерирует частичный метод для OnModelCreating, а затем использует свободный API в новом частичном классе, чтобы установить параметр Required вместо атрибутов.
Или просто реализуйте свой OnModelCreating в файле частичного класса и после повторного создания шаблона базы данных вручную удалите метод OnModelCreating, сгенерированный шаблоном.
Очевидно, мне нужно больше читать, я почти, но не совсем слежу за вами обоими. Я получил EF Core Power Tools, но потом вы потеряли меня в понимании того, как использовать свободный API. И я не понимаю, как делать то, что говорит Дэвид.
Как указал ErikEJ, это не сработает:
You could use a metadata class along with a partial class (example copied from doc):
using System; using System.Web.DynamicData; using System.ComponentModel.DataAnnotations; using System.Globalization; [MetadataType(typeof(UserInfoMetaData))] public partial class UserInfo { } public class UserInfoMetaData { [Required()] public object FirstName; }This would then sit in a separate file, that won't be touched by code-gen. Note that you don't need to add all properties to the metadata class and their type doesn't matter - but the names must match.
Однако есть несколько способов заставить его работать, см. этот пункт SO, который сам основан на этом Вопрос по форуму ASP.NET. В ссылке ASP.net также есть предложение выполнить проверку модели представления вместо классов данных. Так что это может быть возможность рассмотреть.
@ErikEJ, к сожалению, я еще не работал с EF Core; но я расширил ответ. Спасибо
Если вы сначала используете базу данных, вы делаете столбец базы данных обязательным (НЕ NULL), а затем снова запускаете скаффолдинг, а не наоборот. При формировании шаблонов вы можете выбрать создание сгенерированных атрибутов вместо быстрой конфигурации, если вы это сделаете, вы получите добавленный атрибут «Обязательный» (для ссылочных типов).
Переключатель для Scaffold-Dbontext - -DataAnnotations
https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/powershell#scaffold-dbcontext
спасибо ... это супер интересно, я никогда раньше не видел флаг -DataAnnotations. Я прочту это, как только приду сегодня через пару часов. Я ценю обновление.
Будет время (часто), когда другой программист будет менять базу данных. У меня может не быть другого выбора, кроме как использовать Scaffold-DbContext -Force. Мне нужно знать, как это сделать. Несколько мест подтверждают, что это правильный рабочий процесс по сравнению с переходом на миграции. Мне сказали использовать частичные классы, и в настоящее время я пытаюсь заставить это работать.