powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Программно посмотреть DataAnnotations у свойства модели EF
19 сообщений из 19, страница 1 из 1
Программно посмотреть DataAnnotations у свойства модели EF
    #38413293
Andrey_VP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Есть класс, модель Entity Framework, с набором свойств (полей).
Поля имеют DataAnnotations, например: [Display(Name="Поле")]

Как программно посмотреть, например, какое значение DataAnnotations.Display у какого-нибудь поля данной модели EF ?
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38413445
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_VPЗдравствуйте!

Есть класс, модель Entity Framework, с набором свойств (полей).
Поля имеют DataAnnotations, например: [Display(Name="Поле")]

Как программно посмотреть, например, какое значение DataAnnotations.Display у какого-нибудь поля данной модели EF ?
1. Рефлекшеном извлечь из классов сущностей.

или

2. Рыться в метаданных EF, живущих в ObjectContext.MetadataWorkspace. Тут решение зависит от версии EF и там не всё задокументировано.
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38413948
Andrey_VP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К, спасибо за подсказки.

Порылся в "метаданных EF, живущих в ObjectContext.MetadataWorkspace", но так ничего и не нашёл.
Пришлось сделать так (функция возвращает значение DataAnnotations.DisplayAttribute.Name для свойства EF модели):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
      public string getDisplayName(Type EFmodel, string EFpropertyName)
        {
            string s="";

            PropertyInfo property = EFmodel.GetProperties(BindingFlags.Instance | BindingFlags.Public).Where(p => p.Name == EFpropertyName).FirstOrDefault();
            if (property.IsDefined(typeof(System.ComponentModel.DataAnnotations.DisplayAttribute), true))
            {
                CustomAttributeData attribute =
                        property.GetCustomAttributesData().Single(x => x.Constructor.DeclaringType == typeof(System.ComponentModel.DataAnnotations.DisplayAttribute));
                s = attribute.NamedArguments.Where(a => a.MemberInfo.Name == "Name").Select(a => a.TypedValue.Value).FirstOrDefault().ToString();
            }
            return s;
        }
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414057
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это code first? Потому что в db first в edmx вроде нет этих атрибутов. Тогда не понятно, зачем эти атрибуты нужны в EF модели. Им там вообще не место.
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414060
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_VP,
автор PropertyInfo property = EFmodel.GetProperties(BindingFlags.Instance | BindingFlags.Public).Where(p => p.Name == EFpropertyName).FirstOrDefault();
А это как? Вы допускаете этим выражением что имена пропертей могут совпадать в типе?
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414090
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_VP,
авторPropertyInfo property = EFmodel.GetProperties(BindingFlags.Instance | BindingFlags.Public).Where(p => p.Name == EFpropertyName).FirstOrDefault();
if (property.IsDefined(typeof(System.ComponentModel.DataAnnotations.DisplayAttribute), true))
хороший финт, если проперть не найдена мы все равно заставим код выполняться - дальше искать в дефолтной атрибуты
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414098
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЭто code first? Потому что в db first в edmx вроде нет этих атрибутов. Тогда не понятно, зачем эти атрибуты нужны в EF модели. Им там вообще не место.

наверное хочет заюзать dto в качестве моделей для вью. нормальная практика, чо ))))
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414100
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_VP,
авторif (property.IsDefined
бедная программа, в нутрях она вытащила массив атрибутов, выкинула Any, и если есть -
хозяин опять полез вытаскивать эти атрибуты, не ужели не очевидно, что IsDefined лучше применять для принятия решения
от маркирован ли объект или нет, но не как не вытаскивать эту маркировку?
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414110
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_VP,
авторstring s="";
зачем нам на стеке это архитектурное излишество равно как и интренирование, в стринге есть статическое определение этой сущности
Короче, не зачет, переписывать все по новой..
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414120
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttнаверное хочет заюзать dto в качестве моделей для вью. нормальная практика, чо ))))
Хреновая практика, очень хреновая :)
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414129
Andrey_VP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за критику, господа.
Написали бы и свои гениально верные решения для обучения новичков.
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414138
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_VP,
да нет проблем две минуты
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public static class Help
    {
        public static string GetNamePropertyDa(this PropertyInfo info )
        {
            if (info == null) return string.Empty;
            var ee=  info.GetCustomAttributes(typeof (DisplayAttribute), true);
            return ee.Any() ? ee.Cast<DisplayAttribute>().First().Name : string.Empty;
        }
    }
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414145
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиAndrey_VP,
да нет проблем две минуты
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public static class Help
    {
        public static string GetNamePropertyDa(this PropertyInfo info )
        {
            if (info == null) return string.Empty;
            var ee=  info.GetCustomAttributes(typeof (DisplayAttribute), true);
            return ee.Any() ? ee.Cast<DisplayAttribute>().First().Name : string.Empty;
        }
    }



Не правильно! Нельзя трогать свойство Name атрибута DisplayAttribute. Объяснить?
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414149
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_VPСпасибо за критику, господа.
Написали бы и свои гениально верные решения для обучения новичков.
http://ru.wikipedia.org/wiki/Model-View-ViewModel
http://ru.wikipedia.org/wiki/Model-View-Controller
http://ru.wikipedia.org/wiki/Model-View-Presenter

Этого хватит за глаза, чтобы писать правильный код, а не ковыряться в заднице прикладном коде рефлексией.
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414151
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
давай
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414156
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_VPСпасибо за критику, господа.
Написали бы и свои гениально верные решения для обучения новичков.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
            using System.Reflection;

            ...
            var properties = from p in typeof(MyModelType).GetProperties()
                             where p.IsDefined(typeof(DisplayAttribute), false)
                             let display = p.GetCustomAttribute<DisplayAttribute>()
                             select new
                             {
                                 PropertyName = p.Name,
                                 DisplayName = display.GetName(),
                                 Description = display.GetDescription()
                             };



MyModelType - ваша модель

всё блин. в properties лежат имя проперти, его DisplayName, Description.. добавить по вкусу. можно кастануть в Dictionary и доставать по ключу.
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414158
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиhVostt,
давай

в Name, вместо нужной локализованной строки может лежать наименование ключа локализованного ресурса.

необходимо всегда использовать метод GetName().
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414173
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttнеобходимо всегда использовать метод GetName().
Если ResourceType == null и в этом есть уверенность, то можно смело пользоваться Name. Но лучше прислушаться к рекомендациям MS.
...
Рейтинг: 0 / 0
Программно посмотреть DataAnnotations у свойства модели EF
    #38414190
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttГде-то в степиhVostt,
давай

в Name, вместо нужной локализованной строки может лежать наименование ключа локализованного ресурса.

необходимо всегда использовать метод GetName().
принимаю, согласен, посыпаю голову, не залез в справку, понадеялся на топикавтора "a => a.MemberInfo.Name == "Name""
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Программно посмотреть DataAnnotations у свойства модели EF
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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