EF не нужно для сопоставления таблиц соединения, когда нет ничего, кроме FK - это хорошо.Он достаточно умен, чтобы выполнить «тихое соединение» за кулисами.
ВОПРОС: как добавить объект Person и вернуть personid, а затем добавить этот идентификатор с 3 ролями в таблицу / связь Personrole?
Вам просто нужно использовать ассоциацию «Роли» в сущности «Персона».Вам не нужно добавлять прямо в таблицу «Роль».
Например:
// Create new Person
Person p = new Person();
p.Name = "John";
// Create new Role
Role r = new Role();
r.Description = "Administrator";
// Add new Role to this new Person
p.Roles.Add(r);
// Add Person to context (no need to add Role)
ctx.AddToPersons(p);
// Save Changes
ctx.SaveChanges();
Entity Framework довольно умный.Он увидит, что есть новая роль, сначала добавьте ее, затем добавьте человека, а затем добавьте запись в таблицу объединения на основе идентификатора только что созданной роли.
HTH.
РЕДАКТИРОВАТЬ - В ответ на комментарий:
thx, что если я хочу добавить существующую роль (например, Roleid = 1, description = "Editor")
Очень похоже на описанное выше.
Просто извлеките существующую роль из БД и добавьте ее к человеку:
Role r = ctx.Roles.SingleOrDefault(x => x.RoleId == 1 && x.Description == "Editor");
p.Roles.Add(r);