使用 C#.Net 中的实体对象创建示例应用程序






1.80/5 (9投票s)
使用 C#.Net 中的实体对象创建示例应用程序
引言
我将解释比数据集和类型化数据集更优越的实体类。
在本文中,我将仅解释实体类的基本知识以及如何使用它们检索数据。
DataSets
通常我们使用数据集来存储数据库值。与实体类相比,数据集非常慢。正如你们所知,数据集包含表的集合,它需要大量内存来存储这些表。这会降低生产力。 数据集 以关系格式保存数据,使其功能强大且易于与关系数据库一起使用。不幸的是,这意味着您将失去面向对象的全部好处。
数据集的问题
1.转换可能失败,因为:· 值可能是 null· 开发人员可能对底层数据类型有误(再次需要对数据库架构有深入了解)。如果您使用的是序数,那么谁知道列 X 在位置 X2。 2.ds.Tables(0) 可能会返回 null 引用(如果 DAL 方法或存储过程的任何部分失败
实体类
实体类提供了更大的灵活性,因为它们通过类库中定义的特殊方法访问数据。利用面向对象的技巧,如继承和封装。
示例步骤
1. 创建一个 Customer 类
在此 Customer 类中,用于获取和设置客户详细信息。它包含 ContactTitle、ContactName、CompanyName、City 属性。Customer 类
/// <summary> /// Class For Setting Customer Details to Property /// </summary> public class Customer { /// <summary> /// Property For Setting Customer ContactTitle /// </summary> private string contactTitle; public string ContactTitle { get { return contactTitle; } set { contactTitle = value; } } /// <summary> /// Property For Setting Customer ContactName /// </summary> private string contactName; public string ContactName { get { return contactName; } set { contactName = value; } } /// <summary> /// Property For Setting Customer CompanyName /// </summary> private string companyName; public string CompanyName { get { return companyName; } set { companyName = value; } } /// <summary> /// Property For Setting Customer City /// </summary> private string city; public string City { get { return city; } set { city = value; } } }
2.建立数据库连接
通过使用以下方法建立数据库连接。我在这里使用 DataReader 来读取 DataRow 值并返回 DataReader 对象。为了建立连接,我使用连接字符串。连接字符串放在 Web.config 文件中。我在这里使用 Northwind 数据库来获取客户详细信息。
"select ContactTitle,ContactName,CompanyName,City from Customers"
3. 获取单个客户
如果您想获取单行(即第一行),我使用以下方法。将数据设置为 Datareader 对象。它返回 PopulateCustomer 方法。
请参考附件代码中的 GetDatasFromDataBase() 方法
/// <summary> /// Method For Getting SingleValues Customer /// </summary> /// <returns></returns> public Customer GetSingleCustomer() { IDataReader dr = null; try { //set The Datas to Datareader dr=GetDatasFromDataBase(); //Read the Single Row dr.Read(); } catch (Exception ex) { throw ex; } return PopulateCustomer(dr); }
Populate Customer
PoulateCustomer 是该方法,它用于从 DataReader 对象中获取单个值,然后设置到 Customer 属性,如 ContactTitle、ContactName、CompanyName、City。PopulateCustomer 方法只是检查“ContactTitle”、“ContactName”、“CompanyName”和“City”字段是否不为 null,如果不是 null,则将其添加到 Customer 对象中,并将 Customer 对象返回给调用程序。
对于映射函数,我们使用 IDataRecord,而不是使用 SqlDataReader。
/// <summary> /// PopulateCustomer method which returns the Customer object. /// </summary> /// <param name="dr"></param> /// <returns></returns> public Customer PopulateCustomer(IDataRecord dr) { //Create Object For Customer Class Customer objCustomer = new Customer(); //Get the single ContactTitle from DataReader if (dr["ContactTitle"] != DBNull.Value) { //set the Value to Customer Property objCustomer.ContactTitle = (string)dr["ContactTitle"]; } //Get the single ContactName from DataReader if (dr["ContactName"] != DBNull.Value) { //set the Value to Customer Property objCustomer.ContactName = (string)dr["ContactName"]; } //Get the single CompanyName from DataReader if (dr["CompanyName"] != DBNull.Value) { //set the Value to Customer Property objCustomer.CompanyName = (string)dr["CompanyName"]; } //Get the single City from DataReader if (dr["City"] != DBNull.Value) { //set the Value to Customer Property objCustomer.City = (string)dr["City"]; } return objCustomer; }
4. 多个客户 :
如果您想获取多个客户,我们需要创建另一个名为 CustomerCollection 的类。在这里,我们继承了 CollectionBase 类。您还可以使用 ArrayList 或 HashTables 来添加 CustomerDetails。CollectionBase 是所有集合的基础类,这就是我们实现 CollectionBase 类的原因。
在 CustomerCollection 类内部,我写了一个获取 MultipleCustomers 的方法。它返回 CustomerCollection 对象。在此方法中,我从 DataReader 获取数据
对象
CollectionBase 通过将任何类型的对象存储在私有 ArrayList 中来工作,但通过仅接受特定类型的
方法公开对这些私有集合的访问
/// <summary> /// Class For collection Of Customers /// </summary> public class CustomerCollection : CollectionBase { /// <summary> /// Method For Adding Customer Values. /// </summary> /// <param name="Value"></param> /// <returns></returns> public int Add(Customer Value) { //List.Add() is from CollectionBase Class. return (List.Add(Value)); } /// <summary> /// Method For Getting Multiple Values From Customer /// </summary> /// <returns></returns> public CustomerCollection GetMultipleCustomer() { IDataReader dr = null; CustomerCollection objCustomerColl; try { //set The Datas to Datareader EntityClass obj = new EntityClass(); dr = obj.GetDatasFromDataBase(); //Read the Multiple Rows objCustomerColl = new CustomerCollection(); //Read the Values while (dr.Read()) { //Add the values to CustomerCollection objCustomerColl.Add(obj.PopulateCustomer(dr)); } } catch (Exception ex) { throw ex; } return objCustomerColl; } }