Добавьте [IgnoreDataMemeber] к определенным свойствам в сгенерированном частичном классе - PullRequest
4 голосов
/ 06 июля 2011

У меня есть POCO-класс Entity Framework, сгенерированный шаблоном T4.

Я планирую использовать сгенерированный класс в качестве контракта на данные.Тем не менее, он имеет несколько свойств, которые не должны быть в контракте.Например, у меня есть свойство с именем AddressId.Это внешний ключ к таблице адресов.Поскольку фактический адрес привязан к объекту, я не хочу, чтобы AddressId был виден клиенту.

Я мог бы изменить шаблон T4, но я бы не стал.

Я виделэто post , в котором показано, как использовать MetadataType для добавления атрибутов к существующим свойствам в частичных классах.Вот пример, который они дали:

[MetadataType(typeof(Dinner_Validation))] 
public partial class Dinner {} 

public class Dinner_Validation 
{ 
   [Required] 
   public string Title { get; set; } 
}

Но я попробовал это для своего класса (используя [IgnoreDataMember]), и он не работает (AddressId все еще отображается).

КакМогу ли я скрыть это одно свойство, не создавая совершенно новый класс для копирования всех моих данных?

1 Ответ

3 голосов
/ 06 июля 2011

MetadataType работает только с аннотациями данных. Он не работает с атрибутами сериализации. Атрибуты сериализации должны быть размещены непосредственно в свойствах объекта, поэтому, если вы хотите использовать шаблон T4 для генерации класса, вы должны добавить логику для создания этих атрибутов непосредственно в шаблон.

Редактировать:

Если вы хотите построить логику для генерации специальных атрибутов, вам нужно как-то сообщить шаблону T4, какие свойства следует пометить атрибутом. Вы можете либо жестко закодировать такую ​​информацию в шаблон T4, либо вы можете поместить эту информацию в файл EDMX. Файл EDMX поддерживает пользовательские элементы данных в своей структуре XML. Эти пользовательские элементы XML могут позже использоваться в шаблоне T4 для некоторой дополнительной логики. Единственная проблема состоит в том, что дизайнер не поддерживает это - вы должны добавить пользовательские элементы непосредственно в EDMX, открытый как XML.

Это целое называется Структурные аннотации . Пример с обратной обработкой (изменение генерации базы данных) можно найти в моем другом ответе (также проверьте тему MSDN, связанную в вопросе). Существует также весь проект расширения , который, возможно, позволяет добавлять новые расширения вместе с поддержкой дизайнера. Я думаю, что вы также можете прочитать об этих настройках в Entity Framework 4 в книге Action .

...