我正在使用Dapper使用数据访问类填充我的类。在本课程中,我将完成所有CRUD操作。
public class Product
{
public int id { get; set; }
public string description {get;set;}
public string value {get;set;}
}
public class ProductDa
{
//CRUD operations using Dapper
public List<Product> GetAllElements();
}
现在我需要创建一个返回具有特定值的元素数的函数。
Public int ReturnCountValue(int val)
在此函数中,我将调用GetAllElements
,然后使用LINQ返回所需的值。
我想知道的是,我应该在哪里放置ReturnCountValue
函数:ProductDa
(数据访问层)或Product
(基类)?
答案 0 :(得分:1)
鉴于你使用的模式,我认为你的好心理模型如下:
Product
表示数据库中的一行 - 它是一个普通的旧C#对象(POCO),没有什么特别聪明的。它应该只是一个自动属性的集合,就像你在你的例子中一样。
ProductDa
应该是您进行数据访问的地方。要弄清楚您是否正在访问数据,您应该问自己&#34;我是否会查询数据库以实现此方法?&#34;或者&#34;我会使用Dapper来实现这种方法吗?&#34;如果答案是肯定的,那么与数据库的交互就会进入该类及其方法。
至于你是否应该使用LINQ的Count()
方法或捆绑自己的方法:在数据访问级别,你应该避免为Count()
捆绑自己的方法。数据访问层应该是抽象出你如何查询数据库的细节;消费者对您的数据访问层(Count
,Any
,First
等)的进一步操作是可以的。另外,由于您已经返回List<Product>
,因此您可以访问List.Count
属性,因此访问呼叫者很容易。
鉴于这一切,我会修改你的ProductDa
课程如下
public class ProductDa
{
//CRUD operations using Dapper
public List<Product> GetAllElements();
//query database using Dapper to get all the elements where Value == value
public List<Product> GetAllElementsWithValue(int value);
}
并按如下方式使用类来获取返回的Product
的数量:
var dataAccess = new ProductDa();
var threeValuedItems = dataAccess.GetAllElementsWithValue(3);
int numberOfItems = threeValuedItems.Count;
或者,更简洁地说:
var dataAccess = new ProductDa();
var numberOfItemsWithValueThree = dataAccess.GetAllElementsWithValue(3).Count;
答案 1 :(得分:0)
不要编写任何ReturnCountValue
方法,使用LINQ而不是任何方法作为Count。我强烈推荐Repository而不是DAL。 here