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