У меня есть объект для Users
и объект для Projects
.
Мне нужно иметь возможность назначить нескольким пользователям 3 разных свойства списка в моем объекте проекта.Я был в состоянии сделать это успешно для одного свойства (отношения многие ко многим) сущностью соединения.Я мог бы указать UserType
в таблице «Пользователи» и просто использовать одно свойство, но я могу столкнуться со сценариями, в которых пользователи могут выполнять более одной роли (типа), и тогда это не сработает.
IЯ подумал, что могу просто поместить UserType
в таблицу соединений (сущность), но я в растерянности относительно того, как создать эту сущность в моем DBContext.
Вот то, что у меня есть, это работает с одним свойствомопределены:
ProjectEntity:
public class Project : IInt32Identity
{
public int Id { get; set; }
public string ProjectName { get; set; }
...
public bool ProjectActive { get; set; }
public List<ProjectFile> ProjectFiles { get; set; }
public List<ProjectUsers> ProjectUsers { get; set; }
public DateTime ProjectCreatedDate { get; set; }
public DateTime ProjectModifiedDate { get; set; }
}
UserEntity:
public class User : IInt32Identity
{
public int Id { get; set; }
public string UserEmail { get; set; }
...
public List<ProjectUsers> ProjectUsers { get; set; }
public DateTime UserCreatedDate { get; set; }
public DateTime UserLastLoggedInDate { get; set; }
public DateTime UserModifiedDate { get; set; }
}
JoinEntity:
public class ProjectUsers
{
public int UserId { get; set; }
public User User { get; set; }
public int ProjectId { get; set; }
public Project Project { get; set; }
}
И мой OnModelCreating()
в моем DBContext
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ProjectUsers>()
.HasKey(bc => new { bc.UserId, bc.ProjectId });
modelBuilder.Entity<ProjectUsers>()
.HasOne(bc => bc.User)
.WithMany(b => b.ProjectUsers)
.HasForeignKey(bc => bc.UserId);
modelBuilder.Entity<ProjectUsers>()
.HasOne(bc => bc.Project)
.WithMany(c => c.ProjectUsers)
.HasForeignKey(bc => bc.ProjectId);
}
Все работает отлично, как я уже говорил выше, но вот что я хотел бы:
ProjectEntity:
public class Project : IInt32Identity
{
public int Id { get; set; }
public string ProjectName { get; set; }
...
public bool ProjectActive { get; set; }
public List<ProjectFile> ProjectFiles { get; set; }
public List<ProjectUsers> ProjectClients { get; set; }
public List<ProjectUsers> ProjectBuilders { get; set; }
public List<ProjectUsers> ProjectDesigners { get; set; }
public DateTime ProjectCreatedDate { get; set; }
public DateTime ProjectModifiedDate { get; set; }
}
UserEntity - то же самое.
JoinEntity:
public class ProjectUsers
{
public int UserId { get; set; }
public User User { get; set; }
public int ProjectId { get; set; }
public Project Project { get; set; }
public string UserType { get; set; }
}
Я потерян в коде OnModelBinding()
, и я также не уверен, что EF будет достаточно умен для правильного заполнения списков на основе мета UserType
собственность.
Буду признателен за любую помощь или руководство.
TIA