adrão de repositório @EF muitos para muitos insira

Temos 2 tabelas:

utoridade da tabela:

public class Authority
{
   public int ID {get;set;}
   public string Name{get;set;}
      ...
}

Table Agents

public class Agent
{
  public int ID{get;set;}
  public int FirstName{get;set;}
}

E temos um relacionamento muitos-para-muitos entre essas duas tabelas:

public class AuthorityConfiguration : EntityTypeConfiguration<Authority>
{
    public AuthorityConfiguration()
        : base()
    {
        HasKey(p => p.ID);

        HasMany(p => p.Agents).WithMany(a => a.Authorities).Map(mc =>
            {
                mc.MapLeftKey("AuthorityID");
                mc.MapRightKey("AgentID");
                mc.ToTable("AuthorityAgent");
            });


        ToTable("Authority");

    }
}

Tudo está funcionando bem. Mas agora eu tenho uma página para criar uma associação entre as tabelas e preciso inserir na minha tabela "AuthorityAgent" o relacionamento usando o Repository Pattern.

Problema 1: Como posso obter o Agente se meu DAO está recebendo uma Autoridade?

AuthorityDAO.cs

public static void InsertAgent(int authorityID, int agentID)
    {
        var dao = new ConcreteDAO<Authority>();

        Authority authority = dao.Single(p => p.ID.Equals(authorityID));

        // I can't do that because the relationship doesn't exist yet.
        var agent = authority.Agents.Where(p => p.ID.Equals(agentID));


        authority.Agents.Add(agent);

        dao.Attach(authority);

        dao.SaveChanges();

    }

Sei que posso criar meu contexto no DAO para fazê-lo, mas vou frear o padrão, não

Como posso fazer o método acima?

Obrigado

EDIT: Encontrei uma solução, mas não sei se é a melhor maneira de fazê-lo:

Criei um construtor para meu ConcreteDAO passando o ObjectContext e um método para obter meu contexto de objeto:

GenericDAO.cs

public ObjectContext GetContext()
{
     return _context;
}

ConcreteDAO.cs

public ConcreteDAO()
{

}

public ConcreteDAO(ObjectContext context)
    : base(context)
{
}

E dentro da minha autoridadeDAO.cs

 public static void InsertAgent(int authorityID, int agentID)
 {
     var dao = new ConcreteDAO<Authority>();
     Authority authority = dao.Single(p => p.ID.Equals(authorityID));
     dao.Attach(authority);

     var daoAgent = new ConcreteDAO<Agent>(dao.GetContext());

     var agent = daoAgent.Single(p => p.ID == agentID);

     authority.Agents.Add(agent);

     dao.SaveChanges();
}

questionAnswers(1)

yourAnswerToTheQuestion