2017-05-22 3 views
0

Wir haben kürzlich die Implementierung von ADO.NET in Repository Pattern geändert und Entitäten mithilfe von Entity Framework generiert.Repository Pattern Zugriff auf mehrere Tabellen?

Jetzt versuche ich auf 2 Tabellen (Accounts und Submission) zugreifen und ich bekomme keine Include-Methode für den Zugriff auf die zweite Tabelle. Um auf einzelne Tabelle zuzugreifen, gibt die SelectAll-Methode alle erforderlichen Daten aus. Woran mache ich hier falsch?

Schätzen Sie Ihre Antworten.

Hier ist mein 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; 
      } 
     } 
    } 

Hier AccountTable ist die primäre Tabelle, die AccountID hat. WhereAs-Übermittlungstabelle hat AccountID, die Fremdschlüssel aus Account-Tabelle ist. Hier

ist der Konto Tabelle: enter image description here

Hier ist die Submission Tabelle: enter image description here

+0

Was die Beziehung zwischen Konten und Einreichungen - 1-n, 1-1 ... –

+0

Konto Tabelle ist die primäre Tabelle, die AccountID hat. Während die Tabelle "Submissions" über die AccountID verfügt, bei der es sich um einen Foriegn-Schlüssel handelt, auf den in der Tabelle "Accounts" verwiesen wird – Ritha

+0

Ich gehe davon aus, dass Sie versuchen, GetAccountTreeDetails() zu beheben. Was möchten Sie abrufen? Alle Einreichungen, die sich auf einen Account oder alle Accounts und damit verbundenen Einreichungen beziehen? BTW CreateSubmission() -Methode scheint nichts zu tun - ich bin mir nicht sicher, was Sie hier erreichen wollen? –

Antwort

0

Ihre SelectAll() sollte wie folgt sein:

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

Fabrikat Sicher, dass SelectAll() eine Abfrage zurückgibt. Zweitens Ihre Modelle sollten Navigationseigenschaften haben, wie unten:

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

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