ไม่มีในDetach(object entity)
DbContext
ฉันมีความสามารถในการแยกวัตถุในรหัส EF ก่อนหรือไม่
ไม่มีในDetach(object entity)
DbContext
ฉันมีความสามารถในการแยกวัตถุในรหัส EF ก่อนหรือไม่
คำตอบ:
หากคุณต้องการแยกวัตถุที่มีอยู่ให้ปฏิบัติตามคำแนะนำของ @ Slauma หากคุณต้องการโหลดวัตถุโดยไม่มีการติดตามการเปลี่ยนแปลงให้ใช้:
var data = context.MyEntities.AsNoTracking().Where(...).ToList();
ตามที่ระบุไว้ในความคิดเห็นนี้จะไม่แยกออกจากกันอย่างสมบูรณ์ พวกเขายังคงเชื่อมต่อและทำงานการโหลดขี้เกียจ แต่ไม่ได้ติดตามเอนทิตี ควรใช้ตัวอย่างนี้หากคุณต้องการโหลดเอนทิตีเท่านั้นเพื่ออ่านข้อมูลและคุณไม่ได้วางแผนที่จะแก้ไข
นี่คือตัวเลือก:
dbContext.Entry(entity).State = EntityState.Detached;
entity
ต้องเป็นวัตถุที่เป็นรูปธรรมซึ่งเป็นส่วนหนึ่งของคลาสรุ่นของคุณ (บุคคลลูกค้าคำสั่งซื้อ ฯลฯ ) คุณไม่สามารถผ่านเข้าไปใน IQueryable <T> dbContext.Entry(...)
โดยตรง นั่นคือคำถามที่คุณหมายถึง?
Detached
หากคุณต้องการที่จะแยกวัตถุที่แนบมาแล้วกับบริบทที่ตั้งของรัฐเพื่อ หากคุณต้องการไปยังหน่วยงานในการโหลดจาก DB โดยไม่ต้องติดที่ทุกบริบท (ไม่มีการติดตามการเปลี่ยนแปลง), AsNoTracking
การใช้งาน
Detached
โหลดขี้เกียจจะไม่ทำงานหลังจากที่คุณเปลี่ยนสถานะของมันไป
using(ctx){ return ctx....ToList(); }
ฉันไม่เคยใช้และคิดเกี่ยวกับวิธีการนี้ถึงแม้ว่าฉันมักจะโหลดรายการวัตถุและทิ้งบริบทในครั้งเดียวสิ่งที่ต้องการ ในกรณีดังกล่าวการใช้AsNoTracking()
จะสมเหตุสมผลมากเพราะฉันบันทึกการเติมบริบทวัตถุโดยไม่จำเป็น ฉันเดาว่ามันน่าจะมีประสิทธิภาพและการใช้หน่วยความจำโดยเฉพาะอย่างยิ่งสำหรับรายการขนาดใหญ่ใช่มั้ย