คำถามติดแท็ก specification-pattern

4
LINQ to Entities ไม่รู้จักเมธอด
ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อพยายามทำแบบสอบถาม linq: LINQ เป็นเอนทิตีไม่รู้จักเมธอด 'Boolean IsCharityMatching (System.String, System.String)' และวิธีนี้ไม่สามารถแปลเป็นนิพจน์ที่เก็บ ฉันได้อ่านคำถามก่อนหน้านี้มากมายที่ผู้คนได้รับข้อผิดพลาดเดียวกันและถ้าฉันเข้าใจสิ่งนี้อย่างถูกต้องนั่นเป็นเพราะ LINQ to Entities ต้องการนิพจน์การค้นหา linq ทั้งหมดเพื่อแปลเป็นแบบสอบถามเซิร์ฟเวอร์ดังนั้นคุณจึงไม่สามารถเรียกวิธีการภายนอกได้ ในนั้น. ฉันยังไม่สามารถแปลงสถานการณ์ของฉันให้เป็นสิ่งที่ใช้งานได้และสมองของฉันก็เริ่มละลายลงดังนั้นฉันจึงหวังว่าจะมีใครบางคนชี้ฉันไปในทิศทางที่ถูกต้อง เรากำลังใช้ Entity Framework และรูปแบบข้อกำหนด (และฉันยังใหม่สำหรับทั้งสองอย่าง) นี่คือรหัสที่ใช้ข้อกำหนด: ISpecification<Charity> specification = new CharitySearchSpecification(charityTitle, charityReference); charities = charitiesRepository.Find(specification).OrderBy(p => p.RegisteredName).ToList(); นี่คือนิพจน์ linq: public System.Linq.Expressions.Expression<Func<Charity, bool>> IsSatisfied() { return p => p.IsCharityMatching(this.charityName, this.charityReference); } นี่คือวิธี IsCharityMatching: …

4
คำสั่งและ / หรือข้อกำหนดการสืบค้นที่ออกแบบมาอย่างดี
ฉันได้ค้นหาวิธีแก้ปัญหาที่ดีสำหรับปัญหาที่นำเสนอโดยรูปแบบพื้นที่เก็บข้อมูลทั่วไปมาระยะหนึ่งแล้ว (รายการวิธีการเพิ่มขึ้นสำหรับการสืบค้นเฉพาะทาง ฯลฯ ดู: http://ayende.com/blog/3955/repository- is-the-new-singleton ) ฉันชอบแนวคิดในการใช้การสืบค้นคำสั่งโดยเฉพาะอย่างยิ่งการใช้รูปแบบข้อมูลจำเพาะ อย่างไรก็ตามปัญหาของฉันเกี่ยวกับข้อกำหนดคือมันเกี่ยวข้องกับเกณฑ์ของการเลือกอย่างง่ายเท่านั้น (โดยทั่วไปคือ where clause) และไม่ได้จัดการกับปัญหาอื่น ๆ ของการสืบค้นเช่นการเข้าร่วมการจัดกลุ่มการเลือกส่วนย่อยหรือการฉายภาพเป็นต้น โดยพื้นฐานแล้วการค้นหาเพิ่มเติมทั้งหมดจะต้องผ่านการค้นหาจำนวนมากเพื่อให้ได้ชุดข้อมูลที่ถูกต้อง (หมายเหตุ: ฉันใช้คำว่า "คำสั่ง" ในรูปแบบคำสั่งหรือที่เรียกว่าวัตถุแบบสอบถามฉันไม่ได้พูดถึงคำสั่งเช่นเดียวกับในการแยกคำสั่ง / คิวรีที่มีความแตกต่างระหว่างแบบสอบถามและคำสั่ง (อัปเดตลบ แทรก)) ดังนั้นฉันกำลังมองหาทางเลือกอื่นที่ห่อหุ้มข้อความค้นหาทั้งหมด แต่ก็ยังมีความยืดหยุ่นเพียงพอที่คุณจะไม่เพียง แต่แลกเปลี่ยนที่เก็บสปาเก็ตตี้เพื่อเพิ่มคลาสคำสั่ง ฉันเคยใช้เช่น Linqspecs และในขณะที่ฉันพบคุณค่าบางอย่างในการกำหนดชื่อที่มีความหมายให้กับเกณฑ์การคัดเลือก แต่ก็ไม่เพียงพอ บางทีฉันอาจกำลังมองหาวิธีการแก้ปัญหาแบบผสมผสานที่ผสมผสานหลายวิธีเข้าด้วยกัน ฉันกำลังมองหาวิธีแก้ปัญหาที่ผู้อื่นอาจพัฒนาขึ้นเพื่อแก้ไขปัญหานี้หรือแก้ไขปัญหาอื่น แต่ยังคงเป็นไปตามข้อกำหนดเหล่านี้ ในบทความที่เชื่อมโยง Ayende แนะนำให้ใช้บริบท nHibernate โดยตรง แต่ฉันรู้สึกว่าส่วนใหญ่ทำให้ชั้นธุรกิจของคุณซับซ้อนเพราะตอนนี้ต้องมีข้อมูลการสืบค้นด้วย ฉันจะมอบรางวัลให้กับสิ่งนี้ทันทีที่ระยะเวลารอผ่านพ้นไป ดังนั้นโปรดทำให้โซลูชันของคุณมีค่าพร้อมคำอธิบายที่ดีและฉันจะเลือกทางออกที่ดีที่สุดและเพิ่มคะแนนให้กับนักวิ่ง หมายเหตุ: ฉันกำลังมองหาสิ่งที่เป็นไปตาม ORM ไม่จำเป็นต้องเป็น EF หรือ nHibernate อย่างชัดเจน …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.