2013-12-23 1 views
0

저는 WCF에서 새롭고 ID가 클라이언트가 제공 한 ID와 일치하는 모든 객체/레코드를 반환하고자합니다. 지금까지 WCF가 객체를 하나씩 반환했습니다.WCF - ID로 모든 행을 XML로 반환

운영 및 데이터 계약 : 내 코드에 따라 내 사용자 정의 모델로 EF 모델을 번역

[ServiceContract] 
public interface IVdnLoginService 
{ 
    [OperationContract] 
    VdnLoginDac GetVdnByLoginDac(string loginDac); 
} 


[DataContract] 
public class VdnLoginDac 
{ 
    [DataMember] 
    public int VdnLoginDacId { get; set; } 
    [DataMember] 
    public long VdnId { get; set; } 
    [DataMember] 
    public string VdnName { get; set; } 
    [DataMember] 
    public long EmployeeId { get; set; } 
    [DataMember] 
    public string LoginDacName { get; set; } 
} 

본 서비스 : I합니다 (FirstOrDefault를 수강하면 알

public class VdnLoginService : IVdnLoginService 
{ 
    public VdnLoginDac GetVdnByLoginDac(string loginDac) 
    { 
     Entities dbContext = new Entities(); 
     var VdnEntity = (from v 
          in dbContext.LOGINVDNNAMES 
          where v.LOGIN == loginDac 
          select v).FirstOrDefault(); 
     if (VdnEntity != null) 
     { 
      return TranslateLoginVdnNamesEntityToVdnLogin(VdnEntity); 
     } 
     else 
     { 
      throw new Exception("Vdn invalido"); 
     } 
    } 

    private VdnLoginDac TranslateLoginVdnNamesEntityToVdnLogin(LOGINVDNNAMES LoginVdnNamesEntity) 
    { 
     VdnLoginDac vdnLoginDac = new VdnLoginDac(); 
     vdnLoginDac.VdnLoginDacId = LoginVdnNamesEntity.VDNEMPLOYEEID; 
     vdnLoginDac.EmployeeId = LoginVdnNamesEntity.EMPLOYEEID; 
     vdnLoginDac.LoginDacName = LoginVdnNamesEntity.LOGIN; 
     vdnLoginDac.VdnId = LoginVdnNamesEntity.VDNID; 
     vdnLoginDac.VdnName = LoginVdnNamesEntity.VDNNAME; 

     return vdnLoginDac; 

    } 

} 

) 모든 레코드를 다시 검색 할 수는 있지만 WCF가 모든 데이터를 읽는 방법을 알지 못합니다. 반환되는이 컬렉션을 활성화 할 수있는 두 가지가 있습니다

답변

0

답변하고 매우 apreciated 될 것이다 시사 =).

먼저 일치하는 레코드 목록을 반환 할 수 있도록 메서드의 반환 형식을 VdnLoginDac에서 List<VdnLoginDac>으로 변경합니다.

둘째, 방법의 구현에 ToList()FirstOrDefault()를 교체하고 다음과 같이 쿼리에서 VdnLoginDac에 개별 레코드의 매핑을 수행에 대한 검사가 없다는 것을

public List<VdnLoginDac> GetVdnByLoginDac(string loginDac) 
{ 
    Entities dbContext = new Entities(); 
    var VdnEntity = (from v 
         in dbContext.LOGINVDNNAMES 
         where v.LOGIN == loginDac 
         select new VdnLoginDac() { 
          VdnLoginDacId = v.VDNEMPLOYEEID, 
          EmployeeId = v.EMPLOYEEID, 
          LoginDacName = v.LOGIN, 
          VdnId = v.VDNID, 
          VdnName = v.VDNNAME 
         }).ToList(); 

    return VdnEntity; 
} 

VdnEntity이 null인지 또는 0인지 여부를 확인합니다. 클라이언트는 서비스에서 예외를 throw하지 않고 확인해야합니다. 해당 예외가 서비스에서 처리되지 않으면 서비스가 중단되고 클라이언트의 통신 채널이 오류 상태가됩니다.

+0

Tim, 이제 작동 중입니다! 또한 예외에 대한 설명이 정말 좋았습니다! 고마워요! – FelipeFV