Я переопределяю метод ValidateEntity для проверки уникальной проверки, и я ударил камень преткновения.Получение свойства класса по имени
protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary<object, object> items)
{
var result = new DbEntityValidationResult(entityEntry, new List<DbValidationError>());
if (entityEntry.Entity is ReferenceType && entityEntry.State == EntityState.Added)
{
var entity = entityEntry.Entity as ReferenceType;
var pluralService = PluralizationService.CreateService(CultureInfo.GetCultureInfo("en-gb"));
var pluralEntity = pluralService.Pluralize(entity.GetType().Name);
// I would like Courses to be replaced with the property name of pluralEntity
if (Courses.Where(x => x.Title == entity.Title).Count() > 0)
{
result.ValidationErrors.Add(new DbValidationError(nameof(entity.Title), nameof(entity.Title) + " must be unique."));
}
}
if (result.ValidationErrors.Count > 0)
{
return result;
}
else
{
return base.ValidateEntity(entityEntry, items);
}
}
В моем классе SchoolContext у меня есть свойство DbSet<Course> Courses
который является ReferenceType (обычай абстрактного типа класса).
Значение pluralEntity
это курсы, но я хочу, чтобы положить в чем-то, если-заявление аналогично:
if (Property(pluralEntity).Where(x => x.Title == entity.Title).Count() > 0)
{
// validate
}
Есть ли способ сделать это?
Update Я получил это:
var prop = (DbSet<ReferenceType>) GetType().GetProperty(pluralEntity).GetValue(this, null);
if (prop.Where(x => x.Title == entity.Title).Count() > 0)
{
result.ValidationErrors.Add(new DbValidationError(nameof(entity.Title), nameof(entity.Title) + " must be unique."));
}
Но поскольку ReferenceType
является абстрактным классом, он не может бросить его во время выполнения.
Я хотел бы сделать что-то вроде этого
var prop = (DbSet<typeof(entityEntry.Entity.GetType().Name)>)
Но, конечно, это переменная и не может быть принят в качестве общего типа
Итак, вы хотите, чтобы этот метод мог искать дубликаты в любом 'DbSet' для дубликатов в зависимости от типа проверяемого объекта? –
Да, это то, что я пытаюсь сделать. –
Вы всегда будете использовать 'Title' для проверки? –