通过Web API中的Get()方法从多个表中检索数据

时间:2018-07-25 10:59:40

标签: c# asp.net-web-api

我刚开始使用Web API,并成功实现了我的第一个Get方法。我能够检索数据并将其显示给客户端。现在,我必须通过一个Get方法从两个表中检索数据,但我也不能。这是我的用于从单个表中检索数据的代码。

public HttpResponsemessage Get(string Login, string Password)
{
  using (Accord_BMHEntities entities = new Accord_BMHEntities())
  {
    Login = Login.Trim();
    EncryptDecrypt EncryptDecryptObj = new EncryptDecrypt();

    string EncryptedPassword = 
            EncryptDeccrypt.Encrypt(Login.Trim().ToUpper(), Password);

    var userLogin = entities.ITPLUsers.firstOrDefault(e => e.Login == Login  
                & e.Password ==  EncryptedPassword        

   if (UserLogin == null)
   {
     return Request.CreateErrorResponse(HttpStatusCode.NotFound)
   }
   else
   {
     return Request.CreateResponse(HttpStatusCode.OK , UserLogin)
   }
  }
 }

EmpMaster.cs

public partial class EmpMaster
{
  [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", n 
  CA2212:DoNotCallOverridableMethodsInConstructors")]

  Public EmpMaster()
  {
    this.EmpPersonal = new HashSet<EmpPersonal>();
  }

  Public int EmployeeID { get; set; }
  Public int DivisionId { get; set; }
  Public int ResumeId { get; set; }
  Public int GroupId { get; set; }
  Public int DepartmentId { get; set; }
  Public int WorkplaceId { get; set; }
  Public int DesignationId { get; set; }
  Public int Code { get; set; }
  Public int DesignationId { get; set; }

  [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", n 
  CA2227:CollectionPropertiesShouldBeReadOnly")]

  public virtual ICOllection<EmpPersonal> EmpPersonals { get; set; }
}

EmpPersonal.cs

Public partial class EmpPersonal
{
  Public int EmployeeID { get; set; }
  Public int DivisionID { get; set; }
  Public short Gender { get; set; }
  Public short BloodGroup { get; set; }
  Public string FlatNo { get; set; }
  Public string Premises { get; set; }
  Public string Street { get; set; }
  Public string Area { get; set; }
  Public string City { get; set; }
  Public string StateId { get; set; }
  Public string CountryId { get; set; }

  Public virtual EmpMaster EmpMaster { get; set; }
 }

请注意:这两个类都有更多的属性。为了节省时间,我已经提到了其中一些。

3 个答案:

答案 0 :(得分:0)

如果您已为实体之间的关系建模,则可以使用Entity Framweork Include方法(用于快速加载)或Load方法(用于延迟加载)。

此处的文档:Entity Framework Loading Related Entities

否则,您可以返回匿名类型:

var userLogin = entities.ITPLUsers.firstOrDefault(e => e.Login == Login  
            & e.Password ==  EncryptedPassword;
var empPersonal = entities.EmpPersonal.Where(....your condition...);
if (UserLogin == null)
{
   return Request.CreateErrorResponse(HttpStatusCode.NotFound)
}
else
{
   return Request.CreateResponse(HttpStatusCode.OK,new {userlogin = UserLogin, empPersonal = empPersonal});
}

答案 1 :(得分:0)

我假设您需要来自地址实体的用户地址以及用户数据。您在这里有2个选项。您可以使用linq并进行联​​接以通过一个查询获取所有相关数据,也可以一一获取用户和地址数据。最后,您需要合并数据并返回一个结果集,因为您希望在一次响应中返回所有结果。

您显然需要端点的resultModel。 喜欢;

public class UserResultModel
{
    //Properties from User entity
    public int Id { get; set; }
    public string Username { get; set; }
    //Properties from Address entity
    public string City { get; set; }
}

您需要填写此resultModel并返回它。

非安全性建议:我建议不要像这样检查用户的身份验证。 MVC有一个非常好的功能,称为过滤器(有关详细信息,请参见授权过滤器)

答案 2 :(得分:-1)

通过匹配键尝试使用连接的Linq。您将从msdn站点获取示例。Msdn site