5

我刚刚开始了解 C#。我一直在创建类和对象,所以说我创建了一个名为 Member 的类:

 public class Member
 {
     public int MemberID;
     public string FirstName;
     public string LastName;
     public string UserName;
 }

我通过这样做创建了该类的一个新对象:

    Member Billy = new Member();

    Billy.UserName = "Jonesy";
    Billy.FirstName = "Billy";
    Billy.LastName = "Jones";

这一切都很好,但是如果我查询了一个数据库并取回了 5 个成员,我可以动态创建对象吗?或者将这些成员存储在内存中的最佳方式是什么?

我使用了 VB.Net,我只需将它们添加到数据表中。但是我以前从来没有真正做过任何面向对象的编程,并且认为自从我学习 C# 以来,现在是学习 OOP 的最佳时机。

4

4 回答 4

1

这是一个常见的问题。幸运的是,有一个很好的答案:Linq To Sql!你可以在这里阅读:http ://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

它的基本作用是创建一个类,为您在数据库中选择的每个表创建一个类。这使得将所有对象直接从数据库中获取到面向对象编程中变得非常容易。

保存就像调用函数“SubmitChanges()”一样简单。有更多的提供者,但我认为 Linq 非常适合初学者,因为它抽象了很多烦人的部分。

于 2010-03-28T21:03:21.073 回答
1

我建议您查看 LINQ to SQL。然后您可以编写这样的代码来查询数据库以获取特定用户:

Member member = db.Members.Single(member => member.UserName == "Jonesy");

或者让用户匹配一个标准:

IQueryable<Member> members = db.Members
    .Where(member => member.LastName == "Jones");

LINQ to SQL 还负责编写样板代码以根据数据库结构声明类。

于 2010-03-28T21:04:52.777 回答
1

如果您不使用 LINQ to SQL(或实体框架),那么使用常规 ADO.NET DataReader您将遍历结果,使用详细信息实例化一个新对象,并将其添加到列表中。

大致看起来像这样:

List<Member> members = new List<Member>();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    using (SqlCommand command = new SqlCommand(queryString, connection))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                Member member = new Member();
                member.UserName = reader.GetString(0);
                member.FirstName = reader.GetString(1);
                member.LastName = reader.GetString(2);
                members.Add(member);
            }
        }
    }
}

foreach(Member member in members)
{
    // do something
}
于 2010-03-28T21:15:04.437 回答
0

Linq2Sql 建议两次并不是唯一的方法,但考虑到所有对象都可以一对一映射到数据库中的表的情况,它工作得很好。然而,我个人会选择 EF,因为它允许您拥有更多的抽象层。

另外我可以建议您查看 db4o 等,在那里您可以节省 poco ,仅此而已。

于 2010-03-28T22:43:01.323 回答