Связь между таблицами EF
public class User : IdentityUser<int>
{
public string FullName { get; set; }
[Required]
public int DepartmentId { get; set; }
public Department Department { get; set; }
[Required]
public int PositionId { get; set; }
public Position Position { get; set; }
}
public class Department
{
public int Id { get; set; }
public string Name { get; set; }
public string? UniqueNumber { get; set; }
}
public class Position
{
public int Id { get; set; }
public string Title { get; set; }
}
Сейчас если удаляю Department к которому привязан пользователь, то он удаляется вместе с User или Position.
Как в этом случае поступить, запретить удалять должность или отдел если он привязан к пользователю или сделать связь много ко многим. Подскажите пожалуйста как лучше решить эту проблему.
Ответы (1 шт):
Связь много-ко-многим
тут не подойдёт для User-Position
, т.к. она описывается ситуацию, когда один
пользователь может занимать много
должностей, а так же на одной
должности может быть много
пользователей.
Связь User-Department
может быть реализована как много-ко-многим
, если у вас первоначальная логика такая, что один
юзер может работать во многих
отделах. Если у вас один
юзер может работать только в одном
отделе, тут больше подойдёт связь один-ко-многим
.
Для более детального изучения, рекомендую посмотреть эти статьи для правильной конфигурации связи один-ко-многим
(а так же дополнительные):
UPD:
Если вы хотите реализовать удаления Department
таким образом, что бы не удалялся User
, вам нужно указать, что вам юзер может "существовать" без Department
изменив его внешний ключ на nullable
тип, т.е., на int?
. В результате у вас будет вот такой юзер:
public class User : IdentityUser<int>
{
public string FullName { get; set; }
[Required]
public int? DepartmentId { get; set; }
public Department Department { get; set; }
[Required]
public int PositionId { get; set; }
public Position Position { get; set; }
}
Такой пример отлично описан в этом разделе документации Microsoft.