Я импортирую данные, которые могут или не могут уже существовать в моей базе данных. Я бы хотел, чтобы NHibernate связывал любые сущности с существующей базой данных, если она существует (возможно, просто установив первичный ключ / идентификатор), или создавал новую, если ее нет. Я использую архитектуру S # arp для моей платформы (MVC 2, NHibernate, Fluent).
Я добавил атрибут [HasUniqueDomainSignature] в класс и атрибут [DomainSignature] в свойствах, которые я хочу использовать для сравнения. Единственный способ, которым я могу думать (это не является приемлемым решением и может даже не работать), заключается в следующем (psuedo C #):
foreach (Book importedBook in importedBooks){
foreach (Author author in importedBook.Authors){
if (!author.IsValid()){ // NHibernate Validator will check DomainSignatures
author = _authorRepository.GetByExample(author); // This would be to get the db object with the same signature,
//but I don't think I could even update this as I iterate through it.
}
}
}
Как видите, это и грязно, и бессмысленно. Добавьте к этому тот факт, что у меня есть полдюжины ассоциаций в Книге (предмет, формат и т. Д.), И это не имеет никакого смысла. Должен быть простой способ сделать это, что я скучаю. Я не новичок в NHibernate, но я определенно не эксперт.