のDataSource
がBindingSource
に設定され、Datasource
プロパティがカスタムIEnumerable <SomeObject>
に設定されています。このカスタムオブジェクトは、Entity Frameworkのデータコンテキストに由来します。 GridView
から値を変更しようとすると、エラー「The ObjectContext instance has been disposed and can no longer be used for operations that require a connection error
」が表示されます。データコンテキストが既に破棄されているときにこれらの変更を行うため、IEnumerable変数にこれらの変更を保存し、そのデータコンテキストにバインドするのを無効にする方法があるので、これは理解できますか?オブジェクト取得後にエンティティデータコンテキストで「バインディング」を切断します
編集:簡単にするために、新しいリストを宣言し、それを上位のBindingSourceにDataSourceとして設定すると、GridViewから行を更新すると、このListオブジェクトに伝播した変更を見ることができます。しかし、このオブジェクトが結果オブジェクトに何らかの種類の残差を「付ける」と思われるEntity Frameworkのデータコンテキストでのいくつかのクエリの結果である場合も同じことを行う方法。
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;
}
}
リストや配列のようなメモリ内オブジェクトが必要です。たとえば、代わりに '.ToList()'にバインドします。 https://stackoverflow.com/questions/18398356/how-to-solve-the-error-the-objectcontext-instance-has-been-disposed-and-can-no-l –
AsNoTracking()を使用してEfを防止するエンティティへの変更を追跡する – EsnEzz
ええと、AsNoTracking()をクエリに追加しましたが、同じエラーが表示されます。それは私が探している解決策のように聞こえる – astralmaster