0

所以,我正在学习制作一个非常简单的 MVC + EF 页面。它应该将国家列表放入下拉列表中。我遇到了这个错误:

用户代码未处理 ObjectDisposedException:ObjectContext 实例已被释放,不能再用于需要连接的操作。

我以为我知道 DBContext 将被释放,所以我提取了字符串和数组 string[] 中的值。为什么我还是会遇到这个问题?

查看.cshtml...

<select id="register-country">
    @foreach (var country in ViewBag.Countries) { //******** ERROR HERE ********
        <option value="@country[0]">@country[1]</option> 
    }
</select>

控制器.cs ...

public virtual ActionResult RegisterDialogPartial() {
    var csm = new CountryStateModelRepository();
    ViewBag.Countries = csm.GetCountries();
    return PartialView(MVC.Shared.Views._RegisterDialogPartial);
}

数据访问层...

public class CountryStateModelRepository {
    public IQueryable<string[]> GetCountries() {
        using (var db = new CountryStateModelContainer()) {
            return db.Country.Select(r => new string[] { r.CountryISO3, r.CountryName });
        }
    }
    public IQueryable<string> GetCountryStates(string countryISO3) {
        using (var db = new CountryStateModelContainer()) {
            return db.CountryState.Filter(r => r.CountryISO3 == countryISO3.ToUpper()).Select(r=>r.CountryISO3).AsQueryable();
        }
    }
}
4

1 回答 1

2

我很确定 Entity Framework 和 LINQ 的工作方式是在枚举值之前不会执行查询(在这种情况下,直到您的视图才会发生)。如果您希望在函数调用时枚举值,请修改您的方法:

return db.Country.Select(r => new string[] { r.CountryISO3, r.CountryName }).AsEnumerable();
于 2012-07-02T13:43:38.387 回答