2017-05-22 3 views
0

最近、実装をADO.NETからリポジトリパターンに変更し、Entity Frameworkを使用してエンティティを生成しました。リポジトリパターンは複数のテーブルにアクセスできますか?

今、2つのテーブル(アカウントとサブミット)にアクセスしようとしていますが、2番目のテーブルにアクセスするためのインクルードメソッドがありません。 シングルテーブルにアクセスするには、SelectAllメソッドが必要なすべてのデータを提供しています。私はここで間違って何をしているの?

あなたの回答を感謝します。ここで

は私のコードです:

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

ここAccountTableは、アカウントIDを持っているプラ​​イマリテーブルです。 ここで、サブミッションテーブルには、アカウントテーブルから外部キーであるAccountIDがあります。ここで

は、アカウント表である:ここでは enter image description here

を提出表である: enter image description here

+0

から –

+0

アカウントのテーブルには、アカウントIDを持っているプラ​​イマリテーブルです... 1-nは、1-1。 SubmissionsテーブルのAccountIDは、Accountsテーブルから参照されるForiegnキーです。 – Ritha

+0

私はあなたがGetAccountTreeDetails()を修正しようとしていると仮定しています。あなたが取り出そうとしていることは何ですか?アカウントに関連するすべての提出物、またはすべてのアカウントと関連する提出物? BTW CreateSubmission()メソッドは何もしていないようです - 私はあなたがここで何を達成しようとしているのかよく分かりません。 –

答えて

0

あなたのSelectAll()このようなものでなければなりません:

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

メイクSelectAll()がクエリ可能を返すことを確認してください。 第二に、あなたのモデルは以下のように、ナビゲーションプロパティを持つ必要があります:アカウントと提出の関係は何

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

public class Submission 
{ 
    public virtual Account Account { get; set; } 
} 
関連する問題