科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件ASP.NET:自定义实体类简介(5)

ASP.NET:自定义实体类简介(5)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

自定义实体使您获得了面向对象的编程的丰富功能,并帮助您构建了可靠、可维护的 N 层体系结构的框架。

作者:microsoft 来源:Karl Seguin  2007年9月2日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

映射自定义集合

将我们的关系数据映射到自定义集合的过程与我们对自定义实体执行的过程非常相似。我们不再创建一个实体并将其返回,而是将该实体添加到集合中并循环到下一个:

'Visual Basic .NET

Public Function GetAllUsers() As UserCollection

Dim connection As New SqlConnection(CONNECTION_STRING)

Dim command As New SqlCommand("GetAllUsers", connection)

Dim dr As SqlDataReader = Nothing

Try

connection.Open()

dr = command.ExecuteReader(CommandBehavior.SingleResult)

Dim users As New UserCollection

While dr.Read()

users.Add(PopulateUser(dr))

End While

Return users

Finally

If Not dr Is Nothing AndAlso Not dr.IsClosed Then

dr.Close()

End If

connection.Dispose()

command.Dispose()

End Try

End Function

//C#

public UserCollection GetAllUsers() {

SqlConnection connection = new SqlConnection(CONNECTION_STRING);

SqlCommand command =new SqlCommand("GetAllUsers", connection);

SqlDataReader dr = null;

try{

connection.Open();

dr = command.ExecuteReader(CommandBehavior.SingleResult);

UserCollection users = new UserCollection();

while (dr.Read()){

users.Add(PopulateUser(dr));

}

return users;

}finally{

if (dr != null && !dr.IsClosed){

dr.Close();

}

connection.Dispose();

command.Dispose();

}

}

我们从数据库中获得数据、创建自定义集合,然后通过在结果中循环来创建每个 User 对象并将其添加到集合中。同样要注意 PopulateUser 映射函数是如何重新使用的。

添加自定义行为



在讨论自定义实体时,我们只是泛泛地提到可以将自定义行为添加到类中。您向实体中添加的功能类型很大程度上取决于您要实现的业务逻辑的类型,但您可能希望在自定义集合中实现某些常见的功能。一个示例就是返回一个基于某个键的实体,例如基于 userId 的用户:

'Visual Basic .NET

Public Function FindUserById(ByVal userId As Integer) As User

For Each user As User In List

If user.UserId = userId Then

Return user

End If

Next

Return Nothing

End Function

//C#

public User FindUserById(int userId) {

foreach (User user in List) {

if (user.UserId == userId){

return user;

}

}

return null;

}

另一个示例可能是返回基于特定标准(例如部分用户名)的用户子集:

'Visual Basic .NET

Public Function FindMatchingUsers(ByVal search As String) As UserCollection

If search Is Nothing Then

Throw New ArgumentNullException("search cannot be null")

End If

Dim matchingUsers As New UserCollection

For Each user As User In List

Dim userName As String = user.UserName

If Not userName Is Nothing And userName.StartsWith(search) Then

matchingUsers.Add(user)

End If

Next

Return matchingUsers

End Function

//C#

public UserCollection FindMatchingUsers(string search) {

if (search == null){

throw new ArgumentNullException("search cannot be null");

}

UserCollection matchingUsers = new UserCollection();

foreach (User user in List) {

string userName = user.UserName;

if (userName != null && userName.StartsWith(search)){

matchingUsers.Add(user);

}

}

return matchingUsers;

}

可以通过 DataTable.Select 以相同的方式使用 DataSets。需要说明的重要一点是,尽管创建自己的功能使您可以完全控制您的代码,但 Select 方法为完成同样的操作提供了一个非常方便且不需要编写代码的方法。但另一方面,Select 需要开发人员了解基础数据库,而且它不是强类型。

绑定自定义集合

我们看到的第一个示例是将 DataSet 绑定到 ASP.NET 控件。考虑到它很普通,您会高兴地发现自定义集合绑定同样很简单(这是因为 CollectionBase 实现了用于绑定的 Ilist)。自定义集合可以作为任何控件的 DataSource,而 DataBinder.Eval 只能像您使用 DataSet 那样使用:

'Visual Basic .NET

Dim users as UserCollection = DAL.GetallUsers()

repeater.DataSource = users

repeater.DataBind()

//C#

UserCollection users = DAL.GetAllUsers();

repeater.DataSource = users;

repeater.DataBind();

<!-- HTML -->

<asp:Repeater onItemDataBound="r_IDB" ID="repeater" Runat="server">

<ItemTemplate>

<asp:Label ID="userName" Runat="server">

<%# DataBinder.Eval(Container.DataItem, "UserName") %><br />

</asp:Label>

</ItemTemplate>

</asp:Repeater>

您可以不使用列名称作为 DataBinder.Eval 的第二个参数,而指定您希望显示的属性名称,在本例中为 UserName。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章