7

Is it possible to add more Data Anootation member such as Range,Required,... to Entity Framework or Linq to SQL generated classes automatically ?

I want to use data annotation validation for my classes

thanks

Important:Related to this topic: using Metadata with Entity Framework to validate using Data Annotation

EDIT 1)

I create an entity framework model for Northwind database and add Product class.a part of code is like this:

[EdmEntityTypeAttribute(NamespaceName="NorthwindModel", Name="Product")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class Product : EntityObject
{
    #region Factory Method

    /// <summary>
    /// Create a new Product object.
    /// </summary>
    /// <param name="productID">Initial value of the ProductID property.</param>
    /// <param name="productName">Initial value of the ProductName property.</param>
    /// <param name="discontinued">Initial value of the Discontinued property.</param>
    public static Product CreateProduct(global::System.Int32 productID, global::System.String productName, global::System.Boolean discontinued)
    {
        Product product = new Product();
        product.ProductID = productID;
        product.ProductName = productName;
        product.Discontinued = discontinued;
        return product;
    }

    #endregion
    #region Primitive Properties

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.Int32 ProductID
    {
        get
        {
            return _ProductID;
        }
        set
        {
            if (_ProductID != value)
            {
                OnProductIDChanging(value);
                ReportPropertyChanging("ProductID");
                _ProductID = StructuralObject.SetValidValue(value);
                ReportPropertyChanged("ProductID");
                OnProductIDChanged();
            }
        }
    }
    private global::System.Int32 _ProductID;
    partial void OnProductIDChanging(global::System.Int32 value);
    partial void OnProductIDChanged();

I want ProductID being Required but I can't write code this way:

public partial class Product 
    {
        [Required(ErrorMessage="nima")]
        public global::System.Int32 ProductID;

    }

1 Answer 1

8

Yes. You need to create a 2nd partial class for each entity and link it to an auxiliary class with substitute properties.

Suppose you have a generated partial class Customer { public string Name { get; set; } }
The generated class will always be marked as partial.

Then you need to add a file with :

[MetadataType(typeof(CustomerMetadata))]
public partial class Customer
{
    // it's possible to add logic and non-mapped properties here
}


public class CustomerMetadata
{
    [Required(ErrorMessage="Name is required")] 
    public object Name { get; set; }   // note the 'object' type, can be anything
}

Personally I don't consider this a very elegant solution but it works.

Sign up to request clarification or add additional context in comments.

3 Comments

thanks but please see my edit 1.I want add behavior to my generated class
This is the way to do that. For everything you can't set from the ORM designer.
Ok If I want to declare a class that extend first class behavior how I can do this?

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.