Добавьте [IgnoreDataMemeber] к определенным свойствам в созданном разделяемом классе
У меня есть класс Entity Framework POCO, который генерируется шаблоном T4.
Я планирую использовать сгенерированный класс в качестве контракта данных. Однако у него есть несколько свойств, которые не обязательно должны быть в контракте. Например, у меня есть свойство под названием AddressId. Это внешний ключ к адресной таблице. Поскольку фактический адрес прикреплен к объекту, я не хочу, чтобы AddressId был виден клиенту.
Я мог бы изменить шаблон T4, но я бы предпочел нет.
Я видел этот пост , который показал, как использовать MetadataType для добавления атрибутов к существующим свойствам в частичных классах. Вот пример, который они привели:
[MetadataType(typeof(Dinner_Validation))]
public partial class Dinner {}
public class Dinner_Validation
{
[Required]
public string Title { get; set; }
}
Но я попробовал это для моего класса (используя [IgnoreDataMember]), и это не работает (AddressId по-прежнему отображается).
Как я могу скрыть это свойство без необходимости создавать целый новый класс для копирования всех моих данных?
1 ответ:
MetadataType работает только с аннотациями данных. Он не работает с атрибутами сериализации. Атрибуты сериализации должны быть размещены непосредственно на свойствах в сущности, поэтому, если вы хотите использовать шаблон T4 для создания класса, вы должны добавить логику для создания этих атрибутов непосредственно в шаблон.
Правка:
Если вы хотите построить логику для генерации специальных атрибутов, вам нужно каким-то образом сообщить шаблону T4, какие свойства должны быть отмечены этим атрибутом. Вы можете либо жестко Закодируйте такую информацию в шаблон T4 или вы можете поместить эту информацию в файл EDMX. EDMX-файл поддерживает пользовательские элементы данных в своей XML-структуре. Эти пользовательские XML-элементы могут быть использованы в шаблоне T4 для некоторой дополнительной логики. Единственная проблема заключается в том, что конструктор не поддерживает это - вы должны добавить пользовательские элементы непосредственно в EDMX, открытый как XML.
Это целое называется структурными аннотациями. Некоторые примеры с обратной обработкой (модификация базы данных generation) можно найти в Мой другой ответ (также проверьте тему MSDN, связанную в вопросе). Существует также целый проект расширения , который, возможно, позволяет добавлять новые расширения вместе с поддержкой конструктора. Я думаю, что вы также можете прочитать об этих настройках в книге Entity Framework 4 in Action.