EF patrón de repositorio muchos a muchos insertar

Tenemos 2 mesas:

Autoridad de mesa:

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

Agentes de mesa

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

Y tenemos una relación de muchos a muchos entre estas dos tablas:

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");

    }
}

Todo funciona bien. Pero ahora tengo una página para crear una asociación entre las tablas y necesito insertar en mi tabla "autoridadAgente" la relación usando el Patrón de Repositorio.

Problema 1: ¿Cómo puedo obtener el Agente si mi DAO recibe una Autoridad?

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();

    }

Sé que puedo crear mi contexto en el DAO para hacerlo, pero frenaré el Patrón, ¿no?

¿Cómo puedo hacer el método anterior?

Gracias

EDIT: encontré una solución pero no sé si es la mejor manera de hacerlo:

Creé un constructor para mi ConcreteDAO pasando el ObjectContext y un método para obtener el contexto de mi objeto:

GenericDAO.cs

public ObjectContext GetContext()
{
     return _context;
}

ConcreteDAO.cs

public ConcreteDAO()
{

}

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

Y Inside my AuthorityDAO.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();
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta