У меня есть класс Project
, который содержит коллекцию AppUsers
public class Project
{
public int ProjectID { get; set; }
[Required(ErrorMessage = " Please enter a project name")]
public string Name { get; set; }
[Required(ErrorMessage = " Please enter a project description")]
public string Description { get; set; }
public virtual ICollection<AppUser> ProjectManagers { get; set; }
public bool UserIsAlreadyPM(string userId)
{
foreach(AppUser user in this.ProjectManagers)
{
if(user.Id == userId)
{
return true;
}
}
return false;
}
}
Мой AppUser
класс
public class AppUser : IdentityUser
{
//add properties here later
}
Я хочу иметь возможностьдля любого конкретного AppUser
должно быть в пределах ProjectManagers
более чем одного Project
.Я добавляю AppUser
к любому Project.ProjectManagers
с помощью моего метода хранилища:
public void AddProjectManager(int projectID, AppUser user)
{
Project proj = context.Projects.FirstOrDefault(p => p.ProjectID == projectID);
if(proj != null)
{
proj.ProjectManagers.Add(user);
context.SaveChanges();
}
}
Это работает при первом добавлении AppUser
в коллекцию Project.ProjectManagers
.Однако это не сработает, если я попытаюсь добавить их в любую другую коллекцию Project.ProjectManagers
.Если они назначены любому последующему Project.ProjectManagers
, я получаю ошибку первичного ключа, потому что они уже находятся в базе данных в другом проекте.
"SqlException: Нарушение ограничения PRIMARY KEY 'PK_AppUser'. Невозможно вставить дубликат ключав объекте 'dbo.AppUser'. Дублирующее значение ключа (xxxx). "