65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.80/5 (9投票s)

2007年10月16日

CPOL

3分钟阅读

viewsIcon

93995

downloadIcon

1176

使用 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;
    }
}
 


结论

我只解释了基础知识。您还可以做很多其他事情。最好使用实体类而不是从数据访问层返回数据集和数据读取器。当您的应用程序很小时,数据集可能有效,但随着应用程序规模的增长,数据集的使用会造成复杂性。

© . All rights reserved.