しばらくの間プロジェクトで作業していましたが、基本的にC#とMysqlをサーバーサイドシステムとして組み合わせています。パフォーマンス上の問題のため、私は手作業でコードADO.NET私のMySQLのクエリですが、私は書く必要があるコードの量を減らしたいので、私は問題に直面している。Cで重複した同様のメソッドを減らす
protected internal List<Item> Read()
{
List<Item> itemList = new List<Item>();
String query = @"SELECT * FROM items";
itemList = IRead(query);
return itemList;
}
protected internal Item Read(int id)
{
List<Item> itemList = new List<Item>();
Item item = new Item();
String query = String.Format(@"SELECT * FROM items WHERE id = {0}", id);
itemList = IRead(query);
item = itemList.FirstOrDefault();
return item;
}
protected internal List<Item> Read(int startId, int limit, String orderBy = "id", String order = "ASC")
{
List<Item> itemList = new List<Item>();
String query = String.Format(@"SELECT * FROM items WHERE id >= {0} ORDER BY '{1}' '{2}' LIMIT {3}", startId, orderBy, order, limit);
itemList = IRead(query);
return itemList;
}
そしてOrderServiceのクラスのは
ItemServiceクラスのメソッド(コードの下は一例です)しているとしましょう、私は抽象クラスを使用して考えています非常に類似する方法
protected internal List<Order> Read()
{
List<Order> orderList = new List<Order>();
String query = @"SELECT * FROM items";
orderList = IRead(query);
return orderList;
}
protected internal Order Read(int id)
{
Order order = new Order();
String query = String.Format(@"SELECT * FROM invoices WHERE id = {0}", id);
order = IRead(query).FirstOrDefault();
return order;
}
を持っています、メソッド内で異なる戻り値オブジェクト(動的以外)と異なる文字列クエリをどのように処理することができますか。あなたの助けは大いに感謝しています。
あなたは[Dapper](https://github.com/StackExchange/dapper-dot-net)を見ることができます。これらのクエリは十分に単純なように見えますが、私はあなたのパフォーマンスの問題の一部ではないと思います。おそらくORMを使用し、パフォーマンスの問題が発生した場合にのみ、生のSQLにドロップする必要があります。ほとんどのORMはraw SQLを渡すことができます。 – Prescott
@Prescottコメントをいただきありがとうございます。私はDapperを見ましたが、パフォーマンスは従来のado.netに近いことがわかりましたが、このプロジェクトはもうしばらく進んでいますが、切り替えが非常に難しく(時間がかかる)、まだDapperを完全に把握していない。 ORMを除いて他の何か方法がありますか? –
DapperはORMではありません.SQLを手動で記述するのではなく、単にORMを使用するだけです。これとは別に、あなたはおそらくリポジトリパターンを探しており、すべてのエンティティが共有する基本的なCRUD操作のために、汎用ベースリポジトリを作成する可能性があります。 [Dapper Extensions](https://github.com/tmsmith/Dapper-Extensions)は、基本的なDapperクエリの上に基本的にCRUD機能を提供します。つまり、簡単にベースリポジトリを実装できます。 – Groo