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