Лучший подход для связи между тремя таблицами с Entity Framework - PullRequest
2 голосов
/ 10 сентября 2011

Во-первых, извините за мой английский. Во-вторых, я не очень хорош в моделировании баз данных, поэтому могу ошибаться.

Я пишу веб-сайт (думаю, что это форум), где в каждом сообщении каждый пользователь может иметь разные роли.

То, как я бы сделал это без использования Entity Framework, создает 3 таблицы:

  • Пользователь
  • * Группа 1010 *
  • Роль
  • UserGroupRole

Где UserGroupRole будет содержать ключи для 3 таблиц.

Как я могу сделать это с помощью Entity Framework?

Может быть, весь подход неверен, я не уверен.

Заранее спасибо!

1 Ответ

1 голос
/ 10 сентября 2011

Да, я бы, вероятно, также работал с 4 сущностями и таблицами.В EF 4.1 что-то вроде этого:

public class User
{
    public int Id { get; set; }
    public ICollection<UserGroupRole> UserGroupRoles { get; set; }
}

public class Group
{
    public int Id { get; set; }
    public ICollection<UserGroupRole> UserGroupRoles { get; set; }
}

public class Role
{
    public int Id { get; set; }
    public ICollection<UserGroupRole> UserGroupRoles { get; set; }
}

public class UserGroupRole
{
    [Key]
    public int UserId { get; set; }   // FK property
    [Key]
    public int GroupId { get; set; }  // FK property
    [Key]
    public int RoleId { get; set; }   // FK property

    public User User { get; set; }
    public Group Group { get; set; }
    public Role Role { get; set; }
}

Свойства внешнего ключа требуют обязательного выполнения всех трех отношений (null не допускается), а комплексный ключ для всех трех идентификаторов гарантирует, что любая комбинация пользователяГруппа и роль могут существовать только один раз.Вы можете удалить некоторые из коллекций навигации - например, в Group и Role - если они вам не нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...