Я понял, что я делаю неправильно. Короткий ответ заключается в том, что мне нужно было определить обе стороны отношения «многие ко многим», потому что каждый класс участвует в ответной коллекции (User.Roles и Role.Users). Очевидно, что это не было необходимо с CTP5.
См .: Отображение «многие ко многим» не работает - EF 4.1 RC
Чтобы придерживаться моего примера, вот правильный синтаксис.
this.HasMany(x => x.Roles)
.WithMany(r => r.Users).Map(m => {
m.MapLeftKey("Users_Id");
m.MapRightKey("Roles_Id");
m.ToTable("UserRoleLinks");
});
Есть пара подводных камней, которые скрывают для меня простое решение.
1) Определите отношения только один раз. Я определял отношение «многие ко многим» с обеих точек зрения в разных классах EntityTypeConfiguration , что не является необходимым и приводит к собственным ошибкам.
2) Не перепутайте поля, которые вы используете для MapLeftKey и MapRightKey. Порядок интуитивно понятен, но я предполагаю, что это легко что-то, что можно перепутать с помощью копирования / вставки, а что-нет.