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();
}