7

I have a Subsonic3 Active Record generated partial User class which I've extended on with some methods in a separate partial class.

I would like to know if it is possible to add Data Annotations to the member properties on one partial class where it's declared on the other Subsonic Generated one I tried this.

public partial class User
{
    [DataType(DataType.EmailAddress, ErrorMessage = "Please enter an email address")]
    public string Email { get; set; }

    ...
}

That examples gives the "Member is already defined" error.

I think I might have seen an example a while ago of what I'm trying to do with Dynamic Data and Linq2Sql.

3 Answers 3

11

What you will need to do is create a 'buddy class' and apply the Data Annotations to that class:

[MetadataType(typeof(UserValidation))]
public partial class User 
{
  ...
}

public class UserValidation
{
  [DataType(DataType.EmailAddress, ErrorMessage = "Please enter an email address")]
  public string Email { get; set; }
}
Sign up to request clarification or add additional context in comments.

Comments

1

You should create a buddy class as explained here by Scott Guthrie http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

1 Comment

Also this explains a nifty way of to let subsonic even create that buddy class for you subsonicproject.com/docs/User_talk:Minus4
0

This won't directly answer your question, but I had the same problem, and rather than using DataAnnotations, I've been using the FluentValidation framework {0} with great success so far. It works nicely because it provides much of the same functionality, but doesn't apply validation by using attributes on members of the class. Validation happens in a completely separate class that acts on the class being validated (i.e. UserValidator).

{0}: http://fluentvalidation.codeplex.com/

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.