导航属性随机显示为null

时间:2013-01-17 13:47:33

标签: asp.net-mvc wcf entity-framework

请将以下内容视为我的数据库的表结构。 (数据库:地理)

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

以下是我的WCF项目中的方法(Project: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类的定义方式:(Project: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视图显示了国家/地区列表。每个都有一个“View”链接,它调用WCF方法(GetCountrySummary)并将其显示在另一个视图上。

问题是MVC在某些城市的“语言”导航属性中随机接收NULL。比方说,如果我第一次在印度点击“查看”,它工作正常,如果我下次点击它,它会给出“对象引用为空”的错误,当我检查我的“CountrySummary”对象时,它有某些城市的语言为NULL(但它们在数据库中)。

每当我在WCF测试客户端中运行它时,它总是填充货币。但是在MVC应用程序中被调用时有时会失败。

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

我的猜测是存储库实例由于在WCF启动事件中初始化而被重用。尝试在GetCountrySummary方法中创建一个新实例以进行确认。

有关详细信息,请参阅this post