Benim kişisel "sıkça açıklanmış" konular:
Anti-Patterns
İle karıştırmasını müstakil nesneler yerine DTO en kullanmanın (SaveOrUpdate veya Birleştirme artı bazı dağınık kodu). Varlıklar ne kadar karmaşıksa, kod o kadar karışık olur. (Aynı zamanda önemsiz varlıklar ile oldukça iyi çalıştığı anlamına gelir.) Ayende ayrıca Stripper Paterni olarak adlandırır ve kapsülleme sorununu açıklar.
Sebatsizlik cehaletini anlamak ve açık SQL kullanırken olduğu gibi NH uygulamaları yazmak. Bunun bir belirtisi: Bir nesneyi değiştirdikten sonra Update'i çağırmak, Güncelleme çağrılmamış olsa bile neden değişikliklerin sürdüğünü merak etmek, değişikliklerin sürekliliğini nasıl önleyeceğinizi merak etmek.
İşlemleri ve iş kalıbı birimini anlama . Sık rastlanan anti-paternler: örtülü işlemler, işlem başına oturum ve uygulama başına oturum. Biraz daha okuma:
Uygulama mantığını yerleştirmek için NH olaylarını kullanma (örneğin, ekleme ve güncelleme tetikleyicilerinde izlemeyi değiştirme)
Tablo başına bir sınıf oluşturun . Bazı insanlar OOD'yi anlamıyor, bazıları ilişkisel tasarımı anlamıyor.
hatalar
kullanımı biri bire yerine birçok bire. Bu cevapta açıklamaya çalıştım .
Kullanılması getirme katılmak SetMaxResult birlikte. Bu konuyla ilgili en son cevaplarım:
Kendini değiştiren varlıkları yazma . Bir işletme NH tarafından belirlenen değeri tam olarak geri getirmediğinde, kirli sayılır ve her oturumda güncellenir. Örneğin: NH kalıcı koleksiyonunu bir özellik ayarlayıcıda değiştirmek.
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; }
}
Daha fazla olabilir takip ediyor.