powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / EF создавать лукап поля в модели
10 сообщений из 10, страница 1 из 1
EF создавать лукап поля в модели
    #40116782
dotnetmobile555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, насколько корректно писать вот так
Код: c#
1.
2.
3.
4.
5.
6.
7.
public class User
    {
        [Key]
        public Guid Id { get; set; }
        ...
        public List<RefreshToken> RefreshTokens { get; set; } = new List<RefreshToken>();
    }



вместо
Код: c#
1.
2.
3.
4.
5.
6.
7.
public class User
    {
        [Key]
        public Guid Id { get; set; }
        ...
        public List<RefreshToken> RefreshTokens { get; set; }
    }



?

ИМХО
Первый вариант удобнее что бы на налл не проверять при добавлении
...
Рейтинг: 0 / 0
EF создавать лукап поля в модели
    #40116792
dotnetmobile555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
например тут
Код: c#
1.
user.RefreshTokens.Add(refreshToken);



а с другой стороны, все равно хорошо бы на налл проверить
...
Рейтинг: 0 / 0
EF создавать лукап поля в модели
    #40116855
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dotnetmobile555,
инициализировать все принято в конструкторе.
...
Рейтинг: 0 / 0
EF создавать лукап поля в модели
    #40116860
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dotnetmobile555
Коллеги, насколько корректно писать вот так
я писал, проблем не было
...
Рейтинг: 0 / 0
EF создавать лукап поля в модели
    #40116863
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
инициализировать все принято в конструкторе.

кем принято?
...
Рейтинг: 0 / 0
EF создавать лукап поля в модели
    #40116868
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
vb_sub
инициализировать все принято в конструкторе.

кем принято?

конечно по рукам Вам никто не ударит, если свойство класса будет проинициализировано таким образом
Код: c#
1.
 public List<RefreshToken> RefreshTokens { get; set; } = new List<RefreshToken>();


скорее всего при растворении синтаксического сахара и окажется, что инициализация переносится в конструктор.
Я не настаиваю что все должны делать инициализации в конструкторе, но если необходимы пруфы, то сошлюсь на пару источников
дока от МикрософтаConstructors enable the programmer to set default values, limit instantiation, and write code that is flexible and easy to read
Судя по коду ТС хочет проверять на NULL RefreshTokens перед добавлением элемента, чтобы exception не получить, но если лист будет проинициализирован в конструкторе, то проверять не надо.
ВикипедияОдна из ключевых особенностей ООП — инкапсуляция: внутренние поля класса напрямую недоступны, и пользователь может работать с объектом только как с единым целым, через открытые (public) методы. Каждый метод, в идеале, должен быть устроен так, чтобы объект, находящийся в «допустимом» состоянии (то есть когда выполняется инвариант класса), после вызова метода также оказался в допустимом состоянии. И первая задача конструктора — перевести поля объекта в такое состояние
Здесь скорее вопрос вкусовщины- концентрировать логику инициализации в одном месте (конструкторе) или размазывать по классу.
С другой стороны конструктор особо чего-то выдающегося помимо инициализации и не делает- так зачем отбирать у него и эту функциональность.
...
Рейтинг: 0 / 0
EF создавать лукап поля в модели
    #40116870
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
но если необходимы пруфы, то сошлюсь
ссылок не найдено

vb_sub
скорее всего при растворении синтаксического сахара и окажется, что инициализация переносится в конструктор.
Да

vb_sub
Судя по коду ТС хочет проверять на NULL RefreshTokens перед добавлением элемента, чтобы exception не получить, но если лист будет проинициализирован в конструкторе, то проверять не надо.
Если set будет публичный, то надо. Причем независимо от того, в конструкторе или в инициализаторе выполнена инициализация (см. выше - это одно и то же). Для обычных классов стараются делать readonly свойства, но это класс EF-сущности. Кстати, возможно EF сможет работать с сущностью, даже если там будет readonly List, по крайней мере десериализатор конфигурации такое легко съедает. Тогда можно будет проинициализировать и забыть.

vb_sub
так зачем отбирать у него и эту функциональность.
действительно, нафига MS сделали инициализаторы! Запретить!
...
Рейтинг: 0 / 0
EF создавать лукап поля в модели
    #40116880
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
dotnetmobile555,
инициализировать все принято в конструкторе.

есть орм, где создание инстанса можно производить без вызова конструктора, дот нет это допускает..
так что ничего тут страшного нет имхо
...
Рейтинг: 0 / 0
EF создавать лукап поля в модели
    #40116888
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи
где создание инстанса можно производить без вызова конструктора

Это как?
...
Рейтинг: 0 / 0
EF создавать лукап поля в модели
    #40116951
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
несколько лет назад копаясь в исходниках orm находил инстанс не через активатор, а через
FormatterServices.GetUninitializedObject, ка бы понятна была мысль, ( за счет короткого хода поднять скорострельность).
но имхо это из казуистики и спитчей на собеседованиях. гы
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / EF создавать лукап поля в модели
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (2): Анонимы (1), Bing Bot
Читали форум (3): Анонимы (1), Bing Bot, Yandex Bot
Пользователи онлайн (10): Анонимы (7), Bing Bot, Yandex Bot, Google Bot 1 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]