Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to use Data Annotations on the ViewModel?
    primarykey
    data
    text
    <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>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload