ปัญหา "อธิบายบ่อย" ส่วนบุคคลของฉัน:
ต่อต้านรูปแบบ
ล้อเล่นรอบวัตถุที่ถูกดึงออกมา (SaveOrUpdate หรือผสานรวมกับรหัสยุ่ง ๆ ) แทนที่จะใช้ DTO เอนทิตีที่ซับซ้อนยิ่งกว่านั้นรหัสก็จะยุ่งยิ่งขึ้น (มันยังหมายความว่ามันทำงานได้ค่อนข้างดีกับเอนทิตี้เล็ก ๆ น้อย ๆ ) Ayende เรียกมันว่าStripper Patternและอธิบายปัญหาการห่อหุ้ม
ไม่เข้าใจความไม่รู้ที่คงอยู่และเขียนแอปพลิเคชัน NH เมื่อใช้ SQL อย่างชัดเจน อาการที่เกิดขึ้น: การเรียกการอัพเดทหลังจากเปลี่ยนวัตถุสงสัยว่าทำไมการเปลี่ยนแปลงจึงยังคงอยู่แม้ว่าจะไม่ได้รับการเรียกใช้การอัปเดตก็ตาม
- ฉันพยายามอธิบายในคำตอบ SO นี้
- อ่านวิธีการล้างผลงานในเอกสารอ้างอิง
- บล็อกโพสต์โดย kurtharrigerที่ถูกวิจารณ์ว่าสิ่งที่เป็นจริงหนึ่งในคุณสมบัติหลัก (ในฐานะพิสูจน์ว่ามันเป็นความเข้าใจผิดกันเกี่ยวกับ NH)
ไม่เข้าใจธุรกรรมและหน่วยของรูปแบบการทำงาน รูปแบบการต่อต้านเป็นประจำ: ธุรกรรมโดยนัย, เซสชันต่อการดำเนินงานและเซสชันต่อแอปพลิเคชัน อ่านเพิ่มเติม:
การใช้กิจกรรม NH เพื่อใส่ตรรกะของแอปพลิเคชันใน (เช่นการเปลี่ยนแปลงการติดตามในทริกเกอร์การแทรกและการอัปเดต)
สร้างชั้นหนึ่งต่อโต๊ะ บางคนไม่เข้าใจ OOD บางคนไม่เข้าใจการออกแบบเชิงสัมพันธ์
ข้อผิดพลาด
ใช้แบบหนึ่งต่อหนึ่งแทนแบบตัวต่อตัว ฉันพยายามอธิบายในคำตอบนี้
การใช้การดึงข้อมูลเข้าร่วมพร้อมกับ SetMaxResult คำตอบล่าสุดของฉันที่เกี่ยวข้องกับหัวข้อนั้น:
เขียนหน่วยงานที่มีการเปลี่ยนแปลงตัวเอง เมื่อเอนทิตีไม่ส่งคืนค่าที่ตั้งไว้โดย NH อย่างแน่นอนจะถือว่าสกปรกและได้รับการอัปเดตในทุกเซสชัน ตัวอย่างเช่น: การแทนที่คอลเลกชันถาวร NH ใน setter คุณสมบัติ
IList<Address> Addresses
{
get { return addresses; }
// will cause the addresses collection to be built up from scratch
// in the database in every session, even when just reading the entity.
set { addresses = new List<Address>(value); }
}
int Whatever
{
// will make the entity dirty after reading negative values from the db.
// this causes unexpected updates after just reading the entity.
get { if (whatever < 0) return 0; }
set { whatever = value; }
}
อาจจะมากขึ้นกำลังติดตาม