首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从一个对象中的两个表中获取行

从一个对象中的两个表中获取行
EN

Stack Overflow用户
提问于 2018-05-12 03:46:42
回答 2查看 65关注 0票数 0

我有两张表:

代码语言:javascript
复制
[Company]

 - CompanyID
 - Company_Name 
 - softID

[User]

 - UserID 
 - CompanyID
 - User_Name

在我的后台,我有如下的类:

代码语言:javascript
复制
Company 

 - CompanyID
 - Company Name
 - List<User> CompanyUsers

我只使用System.Data.SqlClient

我的问题是:

如何检索包含其用户的公司对象?

我目前在数据访问类中有这个方法:

代码语言:javascript
复制
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-object并遍历SELECT * FROM person WHERE companyID = @companyID检索到的行,或者是否有更好的方法?

EN

回答 2

Stack Overflow用户

发布于 2018-05-12 03:57:50

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

代码语言:javascript
复制
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属性,但以一种简单的方式完成这项工作所付出的代价非常小。

票数 5
EN

Stack Overflow用户

发布于 2018-05-12 03:58:31

实体框架在中实现工作的有效方法.....

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

实体框架允许您通过在EF设计器中编写代码或使用框和线来创建模型。这两种方法都可用于针对现有数据库或创建新数据库。这个视频短片解释了不同之处,以及如何找到适合你的那个。

Introduction to Entity Framework

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50299262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档