Я немного исследовал эту проблему и не смог найти в интернете никакой полезной информации по этой теме.Поэтому то, что я скажу здесь , является лишь предположением .
Как вы уже видели, автоматически сгенерированный код клиентского прокси-сервера гораздо больше украшен атрибутами, чем код на стороне сервера.Например, ваши сущности имеют приятный атрибут [StringLength(8)]
, полученный из модели сущностей.На стороне сервера автоматически сгенерированный файл .metadata.cs
не имеет этих атрибутов на объектах. Я думаю, что это все о шаблонах генерации кода .
Я подозреваю, что шаблон генерации кода RIA Services (который создает файл .g.cs
) гораздо более полный, чем шаблон, который создаетфайл .metadata.cs
на стороне сервера.
Тот факт, что атрибут, отсутствующий в вашем случае, составляет 95% времени, используемого для проверки пользовательского интерфейса на стороне клиента, может объяснить, почему шаблон для файла .metadata.cs
не производит эти проверки атрибуты.
Я вижу 2 обходных пути для вашей проблемы:
1.Напишите свой собственный класс метаданных на стороне сервера
Пример:
[MetadataTypeAttribute(typeof(PRODUCT.PRODUCTMetadata))]
public partial class PRODUCT
{
internal sealed class PRODUCTMetadata
{
// Metadata classes are not meant to be instantiated.
private PRODUCTMetadata()
{
}
[StringLength(8)]
public string Product_code { get; set; }
}
}
Вы можете вручную добавить любые атрибуты к свойствам ваших сущностей, поскольку сущности являются частичными классами.
К сожалению, вам придется поддерживать эти метаданные каждый раз, когда вы изменяете свою модель: если (например) столбец таблицы БД изменится с varchar(8)
на varchar(10)
, вы сможете автоматически обновлять своиМодель EDMX из вашей базы данных, но вам придется вручную проверить, что ваши метаданные все еще в порядке (в этом примере вам придется вручную заменить [StringLength(8)]
на [StringLength(9)]
).
Вот хорошая ссылка о метаданных.
2.Модификация шаблонов T4
Второй вариант, вероятно, самый лучший, но я не испытал себя на модификации шаблона генерации кода, поэтому я не знаю, что можно сделать эффективно или нет.
Шаблоны генерации кода известны как шаблоны T4 ( Инструментарий преобразования текстовых шаблонов ).Можно изменить эти шаблоны, чтобы включить в процесс генерации кода все, что вы хотите.Вы можете изменить шаблон EF по умолчанию, чтобы он генерировал отсутствующие атрибуты, как это делает шаблон RIA Services.
Вот несколько хороших статей о генерации кода T4:
Я пишу это как ответ (это не подходит как комментарий), , но помнитеэто все предположения .