EFとリポジトリを使用して、最初のWeb APIプロジェクトに「GET」リターンステートメントを追加する適切な方法を見つけようとしています。私は数多くの例とチュートリアルに従ってきましたが、それらはすべてWeb APIをセットアップする方法を示していますが、今は追加しようとしています。たとえば、2番目のクラスがある場合、この新しいクラスからすべての値を取得するにはどうすればよいですか?新しいクラスのWebApiチュートリアルにGETリターンを追加する方法
これまでのところ、私は標準的な例をオンラインに従ってきましたが、すべて正常に動作します。 私がこれまで行ってきたことは、2番目のコントローラーを作成し、IRepositoryにメソッド名を追加し、Repository.csに実際のコードを追加することです。
私はこれを正しい方法でやっていることを確認したいだけです。基本的には、私が個々に返すクラスごとにコントローラーを追加し続けるだけで、私のリポジトリを長く長くし続けるのですか?それはこれを行う正しい方法ですか? (チュートリアルに基づく)
第1コントローラ
public class ClientController : ApiController
{
private IRepository _repo;
public ClientController(IRepository repo)
{
_repo = repo;
}
public IQueryable<Client> Get()
{
return _repo.GetAllClients();
}
public IQueryable<Client> Get(bool includeDetails)
{
IQueryable<Client> query;
if (includeDetails)
{
query = _repo.GetAllClientsWithDetails();
}
else
{
query = _repo.GetAllClients();
}
return query;
}
public Client Get(int id)
{
return _repo.GetClient(id);
}
}
IREPOSITORY
public interface IRepository
{
IQueryable<Client> GetAllClients();
IQueryable<Client> GetAllClientsWithDetails();
Client GetClient(int id);
IQueryable<Trade> GetAllTrades();
Trade GetTrade(int id);
}
リポジトリ
public class Repository : IRepository
{
private xxxxV002Context db;
public Repository(xxxxV002Context db)
{
this.db = db;
}
//------------------------------------------------------------------------
public IQueryable<Client> GetAllClients()
{
return db.Clients;
}
public IQueryable<Client> GetAllClientsWithDetails()
{
return db.Clients.Include("Mapping_ClientAccount");
}
public Client GetClient(int id)
{
return db.Clients.Include("Mapping_ClientAccount.Account").FirstOrDefault(o => o.ClientID == id);
}
//-----------------------------------------------------------------------
public IQueryable<Trade> GetAllTrades()
{
return db.Trades;
}
public Trade GetTrade(int id)
{
return db.Trades.FirstOrDefault(x => x.TradeID == id);
}
}
前記第二のコントローラ(NEW)
public class TradeController : ApiController
{
private IRepository _repo;
public TradeController(IRepository repo)
{
_repo = repo;
}
// GET api/<controller>
public IQueryable<Trade> Get()
{
return _repo.GetAllTrades();
}
// GET api/<controller>/5
public Trade Get(int id)
{
return _repo.GetTrade(id);
}
// POST api/<controller>
public void Post([FromBody]string value)
{
}
// PUT api/<controller>/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/<controller>/5
public void Delete(int id)
{
}
}
これをテストと同じようにClientControllerに追加し、Routesを使用して別のクラスのデータを正常に返しました。だから私は複数のコントローラを持つ必要がありますか、または私はちょうど1つのコントローラに多くのメソッドを置くことができますか?ベストプラクティスとは何ですか?
public class ClientController : ApiController
{
private IRepository _repo;
public ClientController(IRepository repo)
{
_repo = repo;
}
public IQueryable<Client> Get()
{
return _repo.GetAllClients();
}
public IQueryable<Client> Get(bool includeDetails)
{
IQueryable<Client> query;
if (includeDetails)
{
query = _repo.GetAllClientsWithDetails();
}
else
{
query = _repo.GetAllClients();
}
return query;
}
public Client Get(int id)
{
return _repo.GetClient(id);
}
[Route("api/client/{customerId}/orders")]
[HttpGet]
public Trade GetOrdersByCustomer(int customerId)
{
xxxxContext db = new xxxxContext();
var x1 = db.Trades.FirstOrDefault(x => x.TradeID == customerId) as xxxx.Models.Trade;
return x1;
}
}
コードの一部を表示して、これまで行ってきたことを確認できますか? – MichaelDotKnox
はい、私は – solarissf