我刚开始使用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; }
}
请注意:这两个类都有更多的属性。为了节省时间,我已经提到了其中一些。
答案 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