ПРИМЕЧАНИЕ: Я не уверен, что это правильное место для такого рода вопросов. Хотя большинство вопросов касаются кода, я также видел некоторые вопросы, касающиеся UML и диаграмм. ПОЖАЛУЙСТА, дайте мне знать, если я сделал упс ie, и я немедленно удалю этот пост. Кроме того, этот пост будет содержать довольно много кода, чтобы я мог лучше объяснить, что происходит в коде.
Я начал работать над моделью домена для своего кода (я знаю, модель домена) должен был быть первым), но у меня есть проблемы с выяснением, как должны выглядеть стрелки между моими классами. Из того, что я прочитал, я получил небольшую идею, но я все еще в замешательстве.
Во-первых this - это ссылка на мою модель домена.
User
используется В качестве модели при создании нового AppUser
класс, который является реализацией IdentityUser
.
AppUser
, используется только тогда, когда вы хотите Login
. Я действительно не уверен, есть ли связь между этими двумя классами. Ниже вы можете видеть единственную часть, где эти два класса участвуют вместе.
public async Task<IActionResult> Login(Login login)
{
if (ModelState.IsValid)
{
AppUser appUser = await userManager.FindByEmailAsync(login.Email);
if (appUser != null)
{
await signInManager.SignOutAsync();
Microsoft.AspNetCore.Identity.SignInResult result = await signInManager.PasswordSignInAsync(appUser, login.Password, false, false);
if (result.Succeeded)
return Redirect(login.ReturnUrl ?? "/");
}
ModelState.AddModelError(nameof(login.Email), "Login Failed: Invalid Email or password");
}
return View(login);
}
RoleEdit
и RoleModification
используются для назначения записи из dbo.AspNetUsers
роли из dbo.AspNetRoles
.
public async Task<IActionResult> Update(string id)
{
IdentityRole role = await roleManager.FindByIdAsync(id);
List<AppUser> members = new List<AppUser>();
List<AppUser> nonMembers = new List<AppUser>();
foreach (AppUser user in userManager.Users)
{
var list = await userManager.IsInRoleAsync(user, role.Name) ? members : nonMembers;
list.Add(user);
}
return View(new RoleEdit
{
Role = role,
Members = members,
NonMembers = nonMembers
});
}
[HttpPost]
public async Task<IActionResult> Update(RoleModification model)
{
IdentityResult result;
if (ModelState.IsValid)
{
foreach (string userId in model.AddIds ?? new string[] { })
{
AppUser user = await userManager.FindByIdAsync(userId);
if (user != null)
{
result = await userManager.AddToRoleAsync(user, model.RoleName);
if (!result.Succeeded)
Errors(result);
}
}
foreach (string userId in model.DeleteIds ?? new string[] { })
{
AppUser user = await userManager.FindByIdAsync(userId);
if (user != null)
{
result = await userManager.RemoveFromRoleAsync(user, model.RoleName);
if (!result.Succeeded)
Errors(result);
}
}
}
if (ModelState.IsValid)
return RedirectToAction(nameof(Index));
else
return await Update(model.RoleId);
}
В Application
может быть много Releases
. Если приложение удалено, его выпуски также будут удалены. Кроме того, Application
должен быть выдан один Environment
(например, Разработка, Тестирование и т. Д. c.)
A Release
может иметь много Phases
. Если релиз удален, его фазы также будут удалены. Как и в Приложениях, Release
должен быть выдан одному Stage
.
A Phase
может иметь много Tasks
. Если фаза удалена, ее задачи не будут удалены.
A Task
может иметь много Dependencies
.
AppIdentityDbContext
- это класс, используемый для соединения с базой данных .
ErrorViewModel
- это класс, который я использовал только один раз, и он не очень важен. Должно ли оно храниться в модели предметной области?
Я думаю, что это в значительной степени так. Модель предметной области, на которую я дал вам ссылку, еще не сделана, поскольку я не был уверен, правильно ли я поступаю или нет. Любая помощь, совет, советы, которые вы могли бы дать мне, невероятно важны и приветствуются!
Спасибо всем, кто прочитал этот длинный пост и смог мне помочь.