Các vấn đề "thường được giải thích" cá nhân của tôi:
Chống mẫu
Loay hoay với các đối tượng tách rời (SaveOrUpdate hoặc Hợp nhất cộng với một số mã lộn xộn) thay vì sử dụng DTO. Các thực thể càng phức tạp, mã càng lộn xộn. (Điều đó cũng có nghĩa là nó hoạt động khá tốt với các thực thể tầm thường.) Ayende cũng gọi nó là Mẫu vũ nữ thoát y và giải thích vấn đề đóng gói.
Không hiểu sự thiếu hiểu biết dai dẳng và viết các ứng dụng NH như khi sử dụng SQL rõ ràng. Triệu chứng của điều đó: gọi Cập nhật sau khi thay đổi một đối tượng, tự hỏi tại sao các thay đổi vẫn tồn tại ngay cả khi Cập nhật chưa được gọi, tự hỏi làm thế nào để tránh các thay đổi được duy trì.
Không hiểu giao dịch và đơn vị của mô hình làm việc . Chống mẫu thường xuyên: giao dịch ngầm, phiên trên mỗi hoạt động và phiên trên mỗi ứng dụng. Một số đọc thêm:
Sử dụng các sự kiện NH để đưa logic ứng dụng vào (ví dụ: theo dõi thay đổi trong trình kích hoạt chèn và cập nhật)
Tạo một lớp mỗi bảng . Một số người không hiểu về 3M, những người khác không hiểu thiết kế quan hệ.
Sai lầm
sử dụng một-một thay vì nhiều-một. Tôi đã cố gắng để giải thích trong câu trả lời này .
Sử dụng tham gia tìm nạp kết hợp với SetMaxResult. Câu trả lời mới nhất của tôi liên quan đến chủ đề đó:
Viết thực thể tự thay đổi . Khi một thực thể không trả lại chính xác giá trị đã được đặt bởi NH, nó sẽ bị coi là bẩn và được cập nhật trong mỗi phiên. Ví dụ: thay thế bộ sưu tập liên tục NH trong bộ thiết lập thuộc tính.
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; }
}
Có thể nhiều hơn là sau.