В настоящее время я разрабатываю приложение, связанное с базой данных, но не использует EntityFramework для создания объектов базы данных. Вместо этого я создал пользовательские классы, которые обрабатывают сущности. Поля внутри этих объектов также используют пользовательские классы. Вот краткий пример:Использование FluentValidation с пользовательскими свойствами в приложении winform C#
public class BookEntity : Entity
{
public Field BookId {get; set;}
public Field Name {get; set;}
public Field Page {get; set;}
public BookEntity()
{
BookId = new Field("Books_BookId");
Name = new Field("Books_Name");
Page = new Field("Books_Page");
}
}
public class Field
{
public String Viewfield{get; set;}
public Object Value{get; set;}
}
Как вы можете видеть, мой Field
класс содержит два свойства. Первый содержит имя поля (с именем таблицы), а другое - значение.
Моя проблема заключается в том, что с использованием FluentValidation я хотел бы иметь возможность установить имя возвращаемого свойства в мое свойство Viewfield
. В настоящее время я могу это сделать, используя расширения WithState
, однако мне нужно будет указать его при каждом правильном правиле проверки.
private class BookValidator : AbstractValidator<Book>
{
/// <summary>
/// Constructor that contains all the validation rules
/// </summary>
public BookValidator()
{
RuleFor(p => (Double?)p.Page.Value)
.NotNull().WithState(p => p.Page.Viewfield)
.LessThanOrEqualTo(p => 1000).WithState(p => p.Page.Viewfield)
.GreaterThanOrEqualTo(p =>100).WithState(p => p.Page.Viewfield)
}
}
я стараюсь делать это с PropertyNameResolver
, но так как я не могу получить доступ к экземпляру книги в то время как в распознаватель, я не могу получить доступ к Viewfield
собственности.
Что бы я хотел, это то, что могло бы избежать повторения WithState.
Также обратите внимание, что я не могу использовать пользовательские атрибуты в своем поле, чтобы установить Viewfield
.
Я надеюсь, что я хорошо объяснил себя,
Спасибо.
Это просто слишком сложный способ не использовать ORM ... – DavidG
Почему вы просто не использовали 'public int BookId {get; установить;} '? и то же самое для других свойств. –
Я хотел бы иметь возможность сделать это, даже перенести рамки в EntityFramework, но я в настоящее время не могу. Как сказал @DavidG, это слишком сложный способ не использовать ORM, но я должен работать с этим на данный момент. – Yannick