2013-01-17 77 views
0

請考慮下面的數據庫表結構。 (數據庫:地理)導航屬性隨機顯示爲空

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。說,如果我第一次點擊印度的「查看」,它會正常工作,如果我下次點擊它,它會給出「對象引用爲空」的錯誤,當我檢查我的「CountrySummary」對象時,它正在某些城市的語言爲NULL(但它們在數據庫中)。

每當我在WCF Test客戶端運行它,它總是填充貨幣。但是在MVC應用程序中調用它時有時會失敗。

任何想法爲什麼會發生這種情況?

+0

您在哪裏創建存儲庫實例?它被緩存並被重用?如果是這樣,這可能是問題所在。 – qujck

+0

1)我在WCF項目的Start方法中註冊我的存儲庫(我已經使用WebActivator注入Start)。 2)我沒有做任何事情來緩存。3)在「Global.asax」事件中創建了MVC項目中的WCF服務實例。 – Nirman

回答

1

我的猜測是,由於在WCF啓動事件中初始化,存儲庫實例正在被重用。嘗試在GetCountrySummary方法內創建一個新實例來確認。

有關更多信息,請參閱this post