gpt4 book ai didi

c# - 从 Repository 返回数据子集的可能方法?

转载 作者:行者123 更新时间:2023-11-30 15:49:32 25 4
gpt4 key购买 nike

假设我需要显示客户列表,但只想显示名称并以某种方式将键与列表控件中的名称相关联。

检索整个客户列表及其所有属性的成本可能很高。在这种情况下,创建另一个具有所需属性(在本例中为 Id 和 Name)的类会更好吗?

一个基本的实现可能是这样的:

public class Customer {
public int Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public int Age { get; set; }
.....
}

public class CustomerListView {
public int Id { get; set; }
public string Name { get; set; }
}

public interface IRepository<T> {
public T Find(int id);
public IEnumerable<T> FindAll();
....
}

public class Repository<T>: IRepository<T> {
....
}

public class CustomerRepository: Repository<Customer> {
public IEnumerable<CustomerListView> FindAllListView();
}

这种方法合适吗?还有哪些其他选择?

最佳答案

为了实现这些目标,我创建了一个简单的“View”类,例如 CustomerView,它只包含显示概览所需的属性。

My Repository 然后有一个方法返回这些 CustomerView 对象的集合。

我在我的项目中主要使用 NHibernate。 Nhibernate 允许您使用“投影”。所以,我在我的存储库中所做的是:(请注意,下面的代码只是一些伪代码;它不会编译)。

public IList<CustomerView> GetAllCustomers()
{
ICriteria crit = _session.CreateCriteria (typeof(Customer));

crit.AddProjection ( ... );

crit.SetResultTransformer (new EntityToBeanTransformer(typeof(CustomerView));

return crit.ToList();
}

事实上,归结为:我告诉我的 O/R 映射器它应该查询 Customers,但它应该返回“CustomerView”类型的实体。在投影的定义中,我还定义了 Customer 类的哪些属性映射到 CustomerView 类的哪些属性。然后,O/R 映射器足够智能,可以生成一个非常简单的查询,该查询仅检索填充 CustomerView 类所需的那些字段。例如,执行的查询可以很简单:

SELECT customerid, customername FROM tblCustomer

关于c# - 从 Repository<T> 返回数据子集的可能方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1456869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com