一直在工作一段时间,基本上它是C#和Mysql作为服务器端系统的组合。由于性能问题,我将代码ADO.NET交给我的mysql查询,但我面临一个问题,因为我想减少需要编写的代码量。在c#中减少重复类似的方法
比方说
ItemService类有方法(下面的代码只是一个例子)
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类具有非常相似的方法
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可以处理你通过它们传递原始的sql。 – Prescott
@Prescott感谢您的评论,我确实了解了Dapper,我知道性能接近于经典的ado.net,但是这个项目已经持续了一段时间,很难切换(耗时),而且我仍然还没有完全掌握Dapper。除了ORM之外,还有其他方法吗? –
Dapper不是ORM,您只需使用它而不是手动编写SQL。除此之外,您可能正在寻找一个存储库模式,并且您可能会创建一个通用基础存储库,用于所有实体将共享的基本CRUD操作。请注意,[Dapper Extensions](https://github.com/tmsmith/Dapper-Extensions)基本上为您提供了在基本Dapper查询之上的CRUD功能,这意味着您可以轻松实现基本回购。 – Groo