Я уверен, что эта проблема уже решалась, но я не могу найти «дубликат».Итак, вопрос:
У меня двунаправленная ассоциация «один ко многим»: документ и комментарии .Таблица комментариев имеет внешний ключ (не обнуляемый), указывающий на таблицу документов.Классы:
public class Document {
public virtual Guid Id {get; set;}
public virtual string Title {get; set;}
public virtual string Body {get; set;}
public virtual IList<Comment> Comments {get; set;}
}
public class Comment {
public virtual Guid Id {get; set;}
public virtual Document Document {get; set;}
public virtual string Body {get; set;}
}
//Mappings
public class DocumentMap : ClassMap<Document> {
public DocumentMap(){
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x=>x.Title);
Map(x=>x.Body);
HasMany(x=>x.Comments).Inverse().Cascade.All().AsBag();
}
}
public class CommentMap : ClassMap<Comment> {
public CommentMap(){
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x=>Body);
References(x=>x.Document).Column("DocumentId").Not.Nullable();
}
}
//The problem
var existingDocument = FetchDocumentFromDatabase(someDocumentGuidId);
Console.WriteLine(existingDocument.Comments.Count()); //0
existingDocument.Comments.Add(new Comment { Document = existingDocument, Body = "Test"});
session.SaveOrUpdateCopy(existingDocument);//all OK
//commiting transaction etc
Console.WriteLine(existingDocument.Comments[0].Id);
// 00000000-0000-0000-0000-000000000000
Но мне нужен мой новый идентификатор комментария здесь!
Комментарий добавлен ОК в БД, но идентификатор объекта по-прежнему пустой Guid.
Как автоматически заполнять идентификаторы дочерних объектов после того, как они были добавлены как часть обновления родительского объекта?
Я использую NHibernate 3.0.0 Alpha 3 (кажется, очень стабильным) и Fluent NHibernate v.1.1.
Пожалуйста, советуйте.
ОБНОВЛЕНИЕ 1: все изменения распространяются на БД очень хорошо (свойства документа обновляются, а также добавляются новые комментарии).