2017-05-22 3 views
0

Nous avons récemment modifié l'implémentation d'ADO.NET en Repository Pattern et généré des entités à l'aide d'Entity Framework.Modèle de référentiel Accéder à plusieurs tables?

Maintenant j'essaie d'accéder à 2 tables (Comptes et Soumission) et je n'obtiens pas la méthode d'inclusion pour accéder à la deuxième table. Pour accéder à la table unique, la méthode SelectAll donne toutes les données requises. WOndering qu'est-ce que je fais mal ici?

Appréciez vos réponses.

Voici mon code:

public class GPController : ApiController 
    { 
     private readonly IRepository<Account> _acctRepository; 
     private readonly IRepository<Submission> _subRepository; 

     public GPController(IRepository<Account> acctRepository, IRepository<Submission> subRepository) 
     { 
      _acctRepository = acctRepository; 
      _subRepository = subRepository; 
     } 



     [HttpPost] 
     public IHttpActionResult CreateAccount(Account account) 
     { 
      try 
      { 
       _acctRepository.Insert(account); 
       _acctRepository.Save(); 
       return Ok<bool>(true); 

      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 
     [HttpPost] 
     public IHttpActionResult CreateSubmission(Submission submission) 
     { 
      try 
      { 
       _subRepository.SelectAll().ToList(); 
       _subRepository.Save(); 
       return Ok<bool>(true); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 

     [HttpGet] 
     public IHttpActionResult GetAccountTreeDetails() 
     { 
      try 
      { 
       var accounts = _acctRepository.SelectAll().ToList(); 
       var submissions = _subRepository.SelectAll().ToList(); 
       //if (submissions.Any()) 
       //{ 
       // var data = from a in accounts 
       //    left join s in submissions on a.AccountId equals s.AccountId 
       //    select a; 
       //} 

       //var data = from acct in _acctRepository 
       //    join sub in _subRepository on acct.AccountId equals sub.AccountId 
       //    select acct; 


       return Ok<List<Account>>(result); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 
    } 

Ici AccountTable est la table primaire qui a AccountID. La table de soumission contient un ID de compte dont la clé externe provient de la table de comptes.

Voici le tableau du compte: enter image description here

Voici le tableau de présentation: enter image description here

+0

Quelle est la relation entre les comptes et les communications - 1-n, 1-1 ... –

+0

table de compte est la table primaire qui a AccountID. Attendu que la table Submissions a AccountID qui est Foriegn clé référencée à partir de la table des comptes. – Ritha

+0

Je suppose que vous essayez de réparer GetAccountTreeDetails(). Qu'est-ce que vous essayez de récupérer - toutes les soumissions liées à un compte ou tous les comptes et les soumissions connexes? BTW CreateSubmission() méthode ne semble rien faire - je ne suis pas sûr de ce que vous essayez d'atteindre ici? –

Répondre

0

Votre SelectAll() devrait être quelque chose comme ceci:

var accounts = _acctRepository.SelectAll().Include(a=> a.Submissions).ToList(); 

Marque Assurez-vous que SelectAll() renvoie un queryable. Deuxièmement, vos modèles doivent avoir des propriétés de navigation, comme ci-dessous:

public class Account 
    { 
     public virtual ICollection<Submission> Submissions { get; set; } 
    } 

public class Submission 
{ 
    public virtual Account Account { get; set; } 
}