1

I am trying to add attributes to existing parameters created by a auto-generated class(Entity Framework Core database classes, which are overwritten each time I update from the database). However, the attributes added as metadata are not being validated. Adding attributes directly to the generated class works.

The generated partial class:

namespace DataAccess.Data.DatabaseContext.Models
{
    public partial class Customer
    {
        //Validation works if directly applied to the class

        //[Range(1, int.MaxValue)] 
        public int CustomerNo { get; set; }

        // [Required]
        public int? HouseNo { get; set; }

Created partial class + MetaData class

namespace DataAccess.Data.DatabaseContext.Models
{
    [MetadataType(typeof(Metadata))]
    public partial class Customer
    {
    }

    public class Metadata
    {
        // These attributes are never validated 

        [Range(1, int.MaxValue)] 
        public int CustomerNo { get; set; }

        [Required]
        public int? HouseNo { get; set; }
    }
}

Code I'm using to validate each time changes are saved(EF Core):

    public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
    {
        var entities = from e in ChangeTracker.Entries()
                       where e.State == EntityState.Added
                             || e.State == EntityState.Modified
                       select e.Entity;
        foreach (var entity in entities)
        {
            var validationContext = new ValidationContext(entity);
            Validator.ValidateObject(entity, validationContext, true);
        }

        return await base.SaveChangesAsync();
    } 
Eliise S
  • 51
  • 4

0 Answers0