2011-02-19 20 views
10

Web uygulamasında veri kalıcılığım için Fluent NHibernate kullanıyorum.Fluent NHibernate Oluşturulmuş VE Atanmış Kimlik Sütunları

Benim sorunum ... Ben türünde bir kimlik özelliği T (hemen hemen her zaman bir int veya GUID) GeneratedBy() kullanılarak tüm varlıkları eşleştiren bir temel sınıf var. Kimlik()

uygulama devreye alma günü Gerekli tohum verilerinin doldurulduğunu kontrol eden ve doğrulayan bir önyükleme düzenleyiciye sahibim. Benim sorunum, doldurulmuş olan tohum verilerinin bir kısmının belirli bir kimliği olması. (Bir enum veya sistem kullanıcısına karşılık gelen kimlikler)

NHibernate'i otomatik olarak oluşturulmuş bir dosya yerine I belirtme kimliğini kullanarak kaydetmeye zorlamanın bir yolu var mı? Bundan sonra depodaki diğer tüm taahhütler otomatik olarak oluşturulabilir. Eğer (NHibernate bunları üretmek zorunda aksine) uygulama tanımlayıcıları atamak isterseniz

cevap

26
Id(x => x.Id).GeneratedBy.Assigned(); 

, atanmış jeneratör kullanabilir. Bu özel jeneratör, nesnenin tanımlayıcı özelliğine atanan tanımlayıcı değerini kullanacaktır. Bu özelliği, iş anlamında anahtarlar (hemen hemen her zaman korkunç bir tasarım kararı) vermek için kullanırken çok dikkatli olun.

Doğası gereği, bu jeneratörü kullanan varlıklar, ISession'ın SaveOrUpdate() yöntemiyle kaydedilemez. Bunun yerine, ISession'un Save() veya Update() yöntemini arayarak nesnenin kaydedilmesi veya güncelleştirilmesi gerekiyorsa NHibernate için açıkça belirtmeniz gerekir.

http://nhibernate.info/doc/nhibernate-reference/mapping.html#mapping-declaration-id-assigned

1

kullanabileceğiniz

Id(I => I.Id).GeneratedBy.Increment(); //Increment by 1