Шаблон репозитория EF много ко многим вставить

У нас есть 2 таблицы:

Таблица полномочий:

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

Настольные агенты

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

И у нас есть отношение многие ко многим между этими двумя таблицами:

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

    }
}

Все работает нормально. Но теперь у меня есть страница, чтобы создать связь между таблицами, и мне нужно вставить в свою таблицу «authorAgent» связь, используя шаблон репозитория.

Проблема 1: Как я могу получить агента, если мой DAO получает полномочия?

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

    }

Я знаю, что могу создать свой контекст в DAO для этого, но я буду тормозить шаблон, не так ли?

Как я могу сделать метод выше?

Спасибо.

РЕДАКТИРОВАТЬ: Я нашел решение, но я не знаю, если это лучший способ сделать это:

Я создал конструктор для моего ConcreteDAO, передав ObjectContext и метод для получения контекста моего объекта:

GenericDAO.cs

public ObjectContext GetContext()
{
     return _context;
}

ConcreteDAO.cs

public ConcreteDAO()
{

}

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

И внутри моего 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();
}

Ответы на вопрос(1)

Ваш ответ на вопрос