2013-01-17 5 views
0

내 데이터베이스의 테이블 구조를 아래에서 고려하십시오. (데이터베이스 : 지리)탐색 속성이 무작위로 null을 표시합니다.

Country >> CountryId, CountryName 
City >> CityId, CityName, LanguageId 
Language >> LanguageId, LanguageName 

다음 내 WCF 프로젝트의 방법이다 (프로젝트 : Geography.WCFPortal는)

[OperationContract] 
public CountrySummary GetCountrySummary(string countryName) 
{ 
CountrySummary countrySummaryRows = new CountrySummary();   
var result = from city in repository.GetQuery<City>() 
        .Include("Language") 
        .Where(city => city.Country.CountryName == countryName) 
        select city; 

     countrySummaryRows.Country = this.GetCountry(countryName); 

     foreach (var city in result.OrderByDescending(m => m.CityName).ToList()) 
     { 
      countrySummaryRows.CityCollection.Add(city); 
     } 
     return countrySummaryRows; 
} 

에 따라 정의하는 방법을 CountrySummary 클래스입니다 : (프로젝트 : Geography.Contracts)

[Serializable] 
[DataContract] 
public class CountrySummary 
{ 
public CountrySummary() 
{ 
this.CityCollection = new List<City>(); 
} 

[DataMember] 
public List<City> CityCollection { get; set; } 

[DataMember] 
public Country Country { get; set; } 

} 

내 MVC 응용 프로그램에서 GetCountrySummary 메서드를 호출 중입니다.

내 MVC보기 중 하나가 국가 목록을 보여줍니다. WCF 메서드 (GetCountrySummary)를 호출하고 다른보기에 표시하는 각자에 대한 "보기"링크가 있습니다.

문제는 일부 도시의 경우 "언어"탐색 속성에서 MVC가 NULL을 임의로받습니다. 말하자면 인도에서 처음으로 "보기"를 클릭하면 잘 동작합니다. 다음 번에 클릭하면 "객체 참조가 null입니다."오류가 발생하고 "CountrySummary"객체를 검사하면 오류가 발생합니다. 일부 도시에서는 언어가 NULL이지만 (데이터베이스에 있음).

WCF 테스트 클라이언트에서 실행할 때마다 통화가 항상 채워집니다. 그러나 MVC 응용 프로그램에서 호출되는 동안 때때로 실패합니다.

왜 이런 일이 벌어 질지 알고 싶습니다.

+0

어디에서 저장소 인스턴스를 만들고 있습니까? 캐시되고 재사용되고 있습니까? 그렇다면 이것이 문제가 될 수 있습니다. – qujck

+0

1) WCF 프로젝트의 Start 메소드에 저장소를 등록합니다 (WebActivator를 사용하여 Start를 주입했습니다). 2) 캐시하기 위해 아무 것도하지 않았습니다. 3) MVC 프로젝트의 WCF 서비스 인스턴스가 "Global.asax"이벤트에서 생성되고 있습니다. – Nirman

답변

1

제 생각 엔 저장소 인스턴스가 WCF 시작 이벤트에서 초기화되기 때문에 재사용되고있는 것 같습니다. GetCountrySummary 메서드 내에서 새 인스턴스를 만들어 확인하십시오.

자세한 내용은 this post을 참조하십시오.

관련 문제