В настоящее время я разрабатываю проект для университета, который предоставляет студентам возможность создать учетную запись, и с помощью этой учетной записи они могут рассчитывать свой средний балл, используя форум и общий доступ к экрану.Я использую технологии ASP.NET MVC и ASP.NET Web Api.Я разработал свой бизнес-уровень и создал классы «Менеджер», которые помогают выполнять операции с БД для всех POCO моего проекта.Все мои классы менеджера используют один и тот же DbContext, который идет из класса BaseManager.У меня есть некоторый набор правил в моих классах POCO, который предотвращает вставку БД, если creedientals не правы.
При неправильном вводе этих полей вставка БД завершается неудачно, как и ожидалось.Но после этого, когда я вставляю правильные значения (ввод значения в поле, которое не должно быть нулевым и т. Д.), Вставка БД снова завершается неудачно, и появляются те же ошибки валидации, что и до неудачной попытки, несмотря на то, что ошибки исправлены.
Вот мой класс POCO пользователя (я разделяю 2 поля, о которых я говорю):
[Table("UserTable")]
public class User
{
[Required]
[Index(IsUnique = true)]
[MaxLength(30, ErrorMessage = "Username can not exceed 30 characters!")]
public string Username { get; set; }
[Required]
[Index(IsUnique = true)]
[MaxLength(50, ErrorMessage = "Email can not exceed 50 characters!")]
[DataType(DataType.EmailAddress)]
[RegularExpression("^([\\w-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3} \\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$")]
public string Email { get; set; }
}
Когда я проверяю DbSet моего соответствующего класса POCO, я вижу всеиз моих попыток объектов также хранятся локально, как и мои 2 записи в базе данных.Вот скриншот:
Вот моя логика бизнес-уровня:
- Я создал универсальные классы репозитория, которые могут быть реализованы любыми классами POCO.
- Я создал класс UnitOfWork, который создает DbSontext с SingletonPattern (объект UnitOfWork, создаваемый в классе UnitOfWorkBase) и имеет 2 метода, используемых классами Manager и ComplexManager.
- 1.Generic GetRepository
- 2.Generic GetManager
- Я использую классы менеджера для определения каждого набора методов POCO, таких как CRUD и POCO, указанныхметоды (например, UserManager имеет CheckCreedientals для метода входа).Все операции с базами данных, сделанные здесь.
- Я использую сложные классы менеджера для достижения методов, требующих более одного менеджера.(Как и метод createAccount, который имеет место в классе AccountComplexManager, создает два класса POCO и добавляет их в базу данных.).Там нет операций БД, за исключением фиксации изменений, внесенных здесь.Вызывается метод соответствующего класса менеджера, и этими методами методов классов менеджера выполняются операции с БД.
- 1.Student POCO
- 2.User POCO
- Я создал 3 базовых класса для моих менеджеров, чтобы уменьшить количество фиктивного кода.
- 1.MotherBaseManager class: объект UnitOfWork, созданный здесь и используемый всеми менеджерами, которые выполняют операции с БД.Этот класс также унаследован от следующих 2 классов.У него есть только метод Context, который возвращает объект UnitOfWork.
- 2.BaseComplexManager class: базовый класс классов ComplexManager.Имеет метод GetManager для получения соответствующих менеджеров для выполнения некоторых задач БД и метод Save для фиксации изменений в БД.
- 3. Класс BaseManager: Базовый класс классов Manager.Он имеет класс Get Repository, чтобы получить соответствующие классы репозитория для выполнения операций с БД, таких как CRUD.
My Class View откорректированной версии Business Layer:
Я хочу очистить dbSet local от объектов с попыткой вставки без перезапуска приложения, чтобы дать пользователям возможность исправить свои ошибки и снова создать учетную запись.
Если у меня естьошибся или ошибся в какой-то момент, пожалуйста, прости меня.Любая помощь будет оценена.Спасибо!