У меня есть модель с определенными свойствами. Я использую отдельный класс с MetadataType для определения требований к свойствам. Я также пытаюсь использовать один и тот же класс метаданных с viewmodel, определяющим только подмножество свойств. Это простой пример кода ситуации для уточнения:Я получаю InvalidOperationException, когда я пытаюсь использовать Metadatatype с viewmodel
[MetadataType(typeof(Metadata))]
class ModelA
{
public class Metadata
{
[Required]
public object Property1 { get; set; }
[Required]
public object Property2 { get; set; }
}
public int Property1 { get; set; }
public int Property2 { get; set; }
}
[MetadataType(typeof(ModelA.Metadata))]
class ViewModelA
{
public int Property1 { get; set; }
}
Проблема заключается в том, когда бритва двигатель пытается обработать вид, она бросает в InvalidOperationException со следующим сообщением об ошибке:
связанных типов метаданных для типа 'ViewModelA' содержит следующие неизвестные свойства или поля: Property2. Убедитесь, что имена этих элементов соответствуют именам свойств основного типа.
В моем понимании проблема здесь в том, что метаданные содержат свойства, которых нет в модели представления. Тем не менее, я действительно не понимаю преимуществ наличия класса метаданных. Так что мои вопросы:
1) Есть ли способ предотвратить выброс этого исключения?
2) Если нет, то какой он лучший образец для этой ситуации? (например, с использованием модели, viewmodel, которая содержит подмножество свойств модели, определяющую аннотации данных, поддерживая подход DRY).
Спасибо за ваш ответ. Таким образом, MetadataType предназначен для автоматически генерируемых классов, таких как базовая структура сущностей базы данных. Однако я сначала использую код, поэтому такое решение кажется мне бесполезным.На самом деле я немного смущен, поскольку я видел эту технику в учебнике MVC (http://www.microsoftvirtualacademy.com/training-courses/developing-asp-net-mvc-4-web-applications-jump-start), поэтому я не знаю, почему они даже упомянули об этом. Возможно, я просмотрю видео. – kexx
Я держу вопрос открытым, так как я действительно не понимаю, что вы подразумеваете, создавая альтернативные классы метаданных. Моя цель здесь заключается в использовании аннотаций данных, и автомат валидации относится к ней, а при определении ограничений только одни, поэтому я все еще ищу для этого хорошее решение. – kexx
@kexx - Я имею в виду, задайте альтернативный класс метаданных только с Property1. Который, как я сказал, так же эффективен, как просто наличие автономной модели представления с ее собственными атрибутами данных. Что касается учебника, они, вероятно, сначала использовали его с базой данных сначала или с моделью. –