0

だから、私は非常に単純な MVC + EF ページを作成することを学んでいます。国のリストをdropDownListに取得することになっています。そして、私はこのエラーに遭遇します:

ObjectDisposedException はユーザー コードによって処理されませんでした: ObjectContext インスタンスは破棄されており、接続を必要とする操作には使用できなくなりました。

DBContext が破棄されることを認識していると思ったので、string と配列 string[] の値を取得します。それでもこの問題が発生するのはなぜですか?

View.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 に答える