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