ฉันมี GridView
ที่ตั้งค่า 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 ที่กล่าวถึงด้านบน จากนั้นเมื่ออัปเดตแถวจาก GridView ฉันจะเห็นการเปลี่ยนแปลงที่เผยแพร่ไปยังออบเจ็กต์รายการนี้ แต่จะทำสิ่งเดียวกันได้อย่างไรเมื่อวัตถุนี้เป็นผลมาจากการสืบค้นหลายครั้งในบริบทข้อมูลของ 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()
แทน stackoverflow.com/questions/18398356/ - person Steve Greene   schedule 21.08.2017