从一个对象中的2个表中获取行

时间:2018-05-11 19:46:42

标签: c# sql oop object select

我有两张桌子:

[Company]

 - CompanyID
 - Company_Name 
 - softID

[User]

 - UserID 
 - CompanyID
 - User_Name

在我的后端,我有以下课程:

Company 

 - CompanyID
 - Company Name
 - List<User> CompanyUsers

我只使用System.Data.SqlClient

我的问题是:

如何与用户一起检索公司对象?

我目前在我的数据访问类中使用此方法:

public Company getCompany(int _softID)
        {
            Company temp = new Company();

            conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Database"].ConnectionString);
            SqlCommand command = new SqlCommand(@"SELECT * FROM company WHERE softID = @softID", conn);
            command.Parameters.Add("@softID", SqlDbType.Int).Value = _softID;
            {
                conn.Open();
                SqlDataReader reader = command.ExecuteReader();
                if (reader.Read())
                {
                    temp.CompanyID = int.Parse(reader["companyID"].ToString());
                    temp.companyName = reader["company_name"].ToString();
                }
                conn.Close();
            }

            return temp;
    }
}

如何以最有效的方式检索公司用户?
我是否需要在我的DAL getUsersByCompanyID中实现另一种方法,在那里我将传递temp - 对象并遍历SELECT * FROM person WHERE companyID = @companyID检索到的行,或者有更好的方法吗?

2 个答案:

答案 0 :(得分:5)

一种相当简单的方法是使用将公司和用户表连接在一起的查询:

public Company getCompany(int _softID)
{
    Company temp = new Company();

    conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Database"].ConnectionString);
    SqlCommand command = new SqlCommand(@"SELECT c.CompanyId, Company_Name, UserId, UserName 
                                          FROM company As c
                                          JOIN [User] As u ON c.CompanyId = u.CompanyId
                                          WHERE softID = @softID;", conn);
    command.Parameters.Add("@softID", SqlDbType.Int).Value = _softID;
    {
        conn.Open();
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            temp.CompanyID = int.Parse(reader["companyID"].ToString());
            temp.companyName = reader["company_name"].ToString();
            temp.CompanyUsers.Add(new User()
                                  {
                                      UserID = int.Parse(reader["UserId"].ToString()),
                                      UserName = reader["UserName"].ToString()
                                  });
        }
        conn.Close();
    }
    return temp;
}

“缺点”是您不断覆盖CompanyIDcompanyName属性,但这样做的代价非常小。

答案 1 :(得分:1)

实体框架以有效方式 .....

完成工作

实体框架(EF)是一种对象关系映射器,它使.NET开发人员能够使用特定于域的对象处理关系数据。它消除了开发人员通常需要编写的大多数数据访问代码的需要。

Entity Framework允许您通过在EF Designer中编写代码或使用框和行来创建模型。这两种方法都可用于定位现有数据库或创建新数据库。这段简短的视频解释了差异以及如何找到适合您的差异。

Introduction to Entity Framework