เหตุใด IDbCommandTreeInterceptor จึงถูกข้ามไปในแบบสอบถามที่สอง

การใช้เฟรมเวิร์กเอนทิตีฉันได้ใช้ข้อจำกัดการลบแบบนุ่มนวล & ระดับข้อมูลด้วย IDbCommandTreeInterceptor สำหรับแบบสอบถามแรกที่ใช้บริบท interceptor จะถูกโจมตี แต่ลองอีกครั้ง (รีเฟรชเบราว์เซอร์) ตัวสกัดกั้นจะถูกข้ามไป ฉันได้ตรวจสอบว่าข้อมูลถูกแคชโดยการเปลี่ยนแปลงข้อมูลบางอย่างโดยใช้สตูดิโอการจัดการเซิร์ฟเวอร์ SQL การเปลี่ยนแปลงจะสะท้อนให้เห็น แต่ตัวสกัดกั้นยังคงถูกข้ามไป สิ่งที่อาจทำให้เกิดสิ่งนี้เกิดขึ้น?


person John Staurt    schedule 09.10.2017    source แหล่งที่มา
comment
ดังนั้นโดย interceptor ถูกข้ามไปคุณหมายความว่าเอนทิตีเป้าหมายกำลังถูกลบจริง ๆ แทนที่จะเป็นการลบแบบนุ่มนวลใช่ไหม   -  person Evk    schedule 09.10.2017
comment
อ็อบเจ็กต์ที่ถูกลบแบบซอฟต์จะถูกส่งคืนหลังจากถูกลบแบบซอฟต์   -  person John Staurt    schedule 09.10.2017
comment
ตัวสกัดกั้นจะถูกข้ามไปเมื่อทำการดีบั๊ก   -  person John Staurt    schedule 09.10.2017


คำตอบ (1)


ตามความคิดเห็นของแหล่งที่มา สิ่งนี้เป็นสิ่งที่คาดหวัง พฤติกรรม

แผนผังคำสั่งถูกสร้างขึ้นสำหรับทั้งคำสั่งการสืบค้นและคำสั่งแทรก/อัพเดต/ลบ อย่างไรก็ตาม แผนผังคำสั่งแบบสอบถามจะถูกแคชตามโมเดล ซึ่งหมายความว่าการสร้างแผนผังคำสั่งจะเกิดขึ้นในครั้งแรกที่ดำเนินการแบบสอบถามเท่านั้น และการแจ้งเตือนนี้จะเกิดขึ้นในเวลานั้นเท่านั้น

ผลที่ตามมาคือผลลัพธ์ของตัวสกัดกั้นของคุณจึงไม่สามารถขึ้นอยู่กับข้อมูลได้

person jbl    schedule 09.10.2017
comment
เข้าใจได้ แต่สิ่งหนึ่งที่ยังสับสนอยู่ก็คือ interceptor จะถูกโจมตี (สำหรับแบบสอบถามเก่า) ถ้าฉันเรียกใช้แบบสอบถามใหม่ จากนั้นเรียกใช้แบบสอบถามเก่าอีกครั้งผ่าน EF แต่หากแบบสอบถามทั้งสองได้ดำเนินการไปแล้วครั้งหนึ่ง interceptor จะถูกข้ามอีกครั้งสำหรับทั้งสองอย่างสลับกันได้ จนกว่าจะมีการดำเนินการแบบสอบถามใหม่ จากนั้น Interceptor ก็โดนโจมตีทั้งแบบสอบถามใหม่และทั้งแบบสอบถามเก่า - person John Staurt; 09.10.2017
comment
@JohnStaurt ไม่คาดคิดจริงๆ คุณได้แก้ไขส่วน queryCache ของการกำหนดค่าแล้ว (ดู blogs.msdn.microsoft.com/premier_developer/2017/03/23/ ) ? - person jbl; 09.10.2017