Атрибут DisplayName для Linq To Sql и динамических данных

В настоящее время я создаю проект динамических данных ASP.NET с LINQ to SQL для доступа к данным. Я знаю, что добавление атрибута DisplayName к одному из моих свойств приведет к тому, что мне нужно, но я бы хотел избежать этого в коде, созданном дизайнером LINQ to SQL.

Есть ли другой простой способ сделать то, что мне нужно, или мне нужно укусить пулю и просто создать свои собственные метаданные?


person Sonny Boy    schedule 24.04.2013    source источник
comment
Не знаю, имеете ли вы в виду следующее под «укусить пулю», но поскольку сущности генерируются как частичные, вы можете создать частичный класс для конкретной сущности и использовать _ 1_ Если у вас возникнут проблемы с этим, ответьте на этот вопрос Проблема с MetadataType   -  person Silvermind    schedule 25.04.2013
comment
Я уже пошел по пути частичных классов, чтобы изменить способ отображения имен каждой из таблиц, но я не уверен, как сделать то же самое с каждым из столбцов / свойств, поскольку я не могу дублировать их в частичный класс, чтобы добавить соответствующие атрибуты.   -  person Sonny Boy    schedule 25.04.2013
comment
Почему вы не можете продублировать их внутри метадатакласса? Они не являются дубликатами внутри частичного класса, а являются полудупликациями внутри класса метаданных. Дополнительный частичный класс просто нужно украсить [MetadataType(typeof(EntityMetaData))]   -  person Silvermind    schedule 25.04.2013
comment
Идеально! Если вы хотите ответить на вопрос, отмечу ваш как ответ.   -  person Sonny Boy    schedule 25.04.2013
comment
Рад помочь. Я дам более полный ответ.   -  person Silvermind    schedule 25.04.2013


Ответы (1)


Вы можете использовать MetadataTypeAttribute для этого, как описано в MSDN.

Из документации, но для полноты (немного изменено, чтобы запечатать метаданные внутри класса):

Если у вас есть объект Customer со свойством Title, вы должны снова определить это свойство в metadata class

using System;
using System.Web.DynamicData;
using System.ComponentModel.DataAnnotations;

[MetadataType(typeof(Customer.CustomerMetaData))]
public partial class Customer
{

    class CustomerMetaData
    {
         // Apply RequiredAttribute
         [Required(ErrorMessage = "Title is required.")]
         public string Title;
    }

}
person Silvermind    schedule 24.04.2013
comment
Для новичков вроде меня: вы в основном создаете новый класс с теми же свойствами, что и исходный класс, а затем прикрепляете свои атрибуты к новому классу. Затем вы можете добавить атрибут MetadataType к исходному классу. - person Sonny Boy; 25.04.2013
comment
@SonnyBoy Да, вдобавок: метод imo даже лучше, если вы используете класс метаданных внутри частичного класса с префиксом Customer в атрибуте. - person Silvermind; 25.04.2013