Potong 'mengikat' dengan konteks Data Entitas setelah pengambilan objek

Saya memiliki GridView yang DataSource-nya disetel ke BindingSource, yang pada gilirannya properti Datasource-nya disetel ke variabel IEnumerable <SomeObject> khusus. Objek khusus ini berasal dari konteks Data Entity Framework. Saat saya mencoba mengubah nilai dari GridView saya mendapatkan kesalahan 'The ObjectContext instance has been disposed and can no longer be used for operations that require a connection error'. Hal ini dapat dimengerti karena saya melakukan modifikasi ini ketika konteks data saya sudah dibuang tetapi apakah ada cara untuk menyimpan perubahan ini dalam variabel IEnumerable dan menonaktifkan 'pengikatannya' ke konteks data yang dibuang tersebut?

Sunting: Untuk menyederhanakan, Jika saya mendeklarasikan Daftar baru dan menetapkannya sebagai Sumber Data ke BindingSource yang disebutkan di atas, maka ketika memperbarui baris dari GridView, saya dapat melihat perubahan yang disebarkan ke objek Daftar ini. Namun bagaimana melakukan hal yang sama jika objek ini merupakan hasil dari beberapa kueri dalam konteks Data Entity Framework yang sepertinya 'melampirkan' semacam sisa ke objek yang dihasilkan.

Berikut adalah kode yang relevan:

using (AmboliCardEntities context = new AmboliCardEntities(Globals.StrEntityConnecitonString))
                {


                    var transaction = context.tblTransactions.AsNoTracking().FirstOrDefault(a => a.GUID == gTransaction);
                    if (transaction != null)
                    {
                        var ret = new TransactionData
                        {
                            Transaction = transaction,

                            ConstantAccumulations = context.tblConstantAccumulations.AsNoTracking()
                                .Where(a => a.transactionid == gTransaction && a.removed == false).AsNoTracking().ToList(),

                            Cashbacks = context.tblCashbacks.AsNoTracking()
                                .Where(a => a.transactionid == gTransaction && a.removed == false).AsNoTracking().ToList(),

                            PurchasedProducts = context.tblPurchasedProducts.AsNoTracking().Include(a => a.tblProduct)
                                .Include(a => a.tblProduct.tblProductBrand)
                                .Include(a => a.tblProduct.tblProductBrand.tblProductCategory)
                                .Include(a => a.tblVehicle)
                                .Include(a => a.tblVehicle.tblVehicleTrim)
                                .Include(a => a.tblVehicle.tblVehicleTrim.tblVehicleModel)
                                .Include(a => a.tblVehicle.tblVehicleTrim.tblVehicleModel.tblVehicleMake)
                                .Where(x => x.transactionid == gTransaction)
                                .AsNoTracking()
                                .ToList()
                        };

                        var vehicles = context.tblVehicles.AsNoTracking().Include(x => x.tblVehicleTrim)
                            .Include(x => x.tblVehicleTrim.tblVehicleModel)
                            .Include(x => x.tblVehicleTrim.tblVehicleModel.tblVehicleMake)
                            .Where(a => a.cardid == transaction.cardguid)
                            .AsNoTracking()
                            .ToList();



                        return ret;

                    }

                }

person astralmaster    schedule 21.08.2017    source sumber
comment
Anda memerlukan objek dalam memori seperti Daftar atau Array. Misalnya ikat ke .ToList() saja. stackoverflow.com/questions/18398356/   -  person Steve Greene    schedule 21.08.2017
comment
Gunakan AsNoTracking() untuk mencegah Ef melacak perubahan pada entitas   -  person esnezz    schedule 21.08.2017
comment
Hm, saya menambahkan AsNoTracking() ke kueri saya tetapi saya masih mendapatkan kesalahan yang sama. Ini memang terdengar seperti solusi yang saya cari   -  person astralmaster    schedule 21.08.2017


Jawaban (1)


Saya menonaktifkan Lazy Loading Entitas Konteks data kerangka menggunakan:

context.Configuration.LazyLoadingEnabled = false;

Dan itu memaksa konteks data untuk mengambil semua nilai sekaligus. Namun saya ingin mendengar penjelasan mengapa metode AsNoTracking() tidak berhasil.

person astralmaster    schedule 21.08.2017