Если у вас есть два разных требования к валидации, у вас должно быть две разные модели представления / DTO.Весь смысл модели представления / DTO - это особый сценарий использования.Здесь у вас есть два разных набора данных запроса, поэтому ваша проблема полностью заключается в попытке использовать один и тот же класс для удовлетворения обоих, когда два не совпадают.
Если вы хотите уменьшить дублирование кода,просто продолжайте использовать наследование:
public class UserLogin : BaseProperties
{
[BsonElement]
[BsonRequired]
[EmailAddress]
[Required]
public string EmailId { get; set; }
[BsonElement]
[BsonRequired]
[DataType(DataType.Password)]
[Required]
public string Password { get; set; }
}
public class UserMaster : UserLogin
{
[BsonElement]
[BsonRequired]
[Required]
public string FirstName { get; set; }
[BsonElement]
[BsonRequired]
[Required]
public string LastName { get; set; }
[BsonIgnore]
[DataType(DataType.Password)]
[Required]
public string NewPassword { get; set; }
}