Вы не можете создать отношение «многие ко многим» в Linq to SQL. Тем не менее, вы можете легко создать свой собственный «сахар» для него.
public partial class User
{
public IQueryable<Role> Roles
{
get { return UserRoles.Select(ur => ur.Role); }
}
}
public partial class Role
{
public IQueryable<User> Users
{
get { return UserRoles.Select(ur => ur.User); }
}
}
Это почти все, что нужно сделать. Это избавит вас от необходимости всегда иметь дело с промежуточной сущностью. Вы можете написать код против него, как если бы это были настоящие отношения M: M:
foreach (Role role in user.Roles) { ... }
Вы даже сможете использовать это в проекциях запросов (хотя у вас, вероятно, будут некоторые проблемы с использованием его в фильтрах).