title: How to use Data Annotations on the ViewModel?
body: <p>I'm using RIA Services with LinqToEntitiesDomainService&lt;> and Silverlight 5 Beta to generate the DomainContext code on the client side.  I have Data Annotations in my Models/Entities to do basic validations, and when using the Models directly, controls such as DataForm perform validations out-of-the-box.  But I'm wrapping my Model in a ViewModel, so I lose all of that automatic validation.  Here is a simplified example:</p>
  
  <pre><code>// In DataModel assembly, regenerated on the client side by RIA Services 
  public class PetModel 
  {
      [Required]
      public string Name { get; set; }
  }
  
  // Only on the client side
  public class PetViewmodel
  {
      private PetModel _model;
  
      public PetViewmodel(PetModel model)
      {
          _model = model;
      }
  
      public string Name
      {
          get { return _model.Name; }
          set { _model.Name = value; }
      }
  }
  </code></pre>
  
  <p>My question is: how can I ensure that <code>Name</code> is considered <code>Required</code> on the client side without duplicating all of my annotations in the ViewModel?   (I may have to use these Entities with different ViewModels in the future - and I'd like to keep the same annotations)</p>
  
  <p>I thought of manually adding the <code>MetadataType</code> attribute to the ViewModel, pointing to the Model type:</p>
  
  <pre><code>[MetadataType(typeof(PetModel))]  
  public class PetViewmodel
  {
  ...
  }
  </code></pre>
  
  <p>But alas, <code>MetadataTypeAttribute</code> is not available in the Silverlight 5 version of <code>System.ComponentModel.DataAnnotations</code>.</p>
  
  <p>Edit: Clarification - the metadata for my entities is included in the entities with a nested class.  I code this class manually because my L2E model is in a separate assembly so the DomainService wizard would not generate it for me.  </p>
  
  <pre><code>[MetadataType(typeof(Metadata))]  
  public partial class PetModel 
  {
      [Required]
      public string Name { get; set; }
  
      public class Metadata 
      {
          [Required]
          public string Name { get; set; }
      }
  }
  </code></pre>
  
  <p>This should be exactly how the wizard would generate the metadata if I understand it correctly.  The RIA Services code generator generates the right data annotations in the client code, so it's picking it up correctly.</p>