Entity Framework 4.1 POCO - загрузка многие ко многим - PullRequest
2 голосов
/ 10 ноября 2011

У меня есть следующие 4 таблицы (упрощенно для этого вопроса):


Компания

CompanyId | Имя

Сотрудник

EmpoyeeId | CompanyId | FirstName | LastName

Разрешение

PermissionId | CompanyId | Разрешение

EmployeePermission

EmployeePermissionId | PermissionId | EmployeeID


И POCO, как показано ниже:

[Table("Employee")]
public class Employee
{
    public int EmployeeId { get; set; }
    public int CompanyId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Company Company { get; set; }
    public List<Permission> Permissions { get; set; }
}

Я хочу иметь возможность загружать компанию и разрешения в качестве свойств Employee. Я могу заставить компанию загрузить следующий код:

var employee = _context.Employees
            .Where(u => u.EmpoyeeId == 1234)
            .Include(u => u.Company)
            .FirstOrDefault();

Не знаю, как загрузить коллекцию разрешений.

Ответы [ 2 ]

5 голосов
/ 10 ноября 2011

Для достижения этой цели необходимо внести изменения в структуру базы данных.

Ваша таблица EmployeePermission должна содержать только 2 столбца внешнего ключа. Таким образом, EF будет управлять таблицей ссылок прозрачно, и вы можете иметь свойство Permissions в классе Employee.

Измените определение класса Employee, чтобы навигационные свойства стали виртуальными.

[Table("Employee")]
public class Employee
{
    public int EmployeeId { get; set; }
    public int CompanyId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual Company Company { get; set; }
    public virtual ICollection<Permission> Permissions { get; set; }
}

Тогда вы можете загрузить Permissions

var employee = _context.Employees
            .Where(u => u.EmpoyeeId == 1234)
            .Include(u => u.Company).Include(u => u.Permissions)
            .FirstOrDefault();
0 голосов
/ 18 февраля 2015

для многих ко многим

public class Employee
{

 public int EmployeeId { get; set; }

    public int CompanyId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual Company Company { get; set; }
    public virtual ICollection<Permission> Permissions { get; set; }
}

public class  Permission {

public virtual ICollection<Employee> Employee{ get; set; }
}

, которые создают новую таблицу EmployeePermission с Employee_Id и Permission_Id

...