В моем приложении у меня есть отношение "многие ко многим" (сопоставленное с FluentNHibernate) между Post и Tag:
Post
{
string Title
List<Tag> Tags
}
Tag
{
string Name
List<Post> Posts
}
Отображения:
public class PostMap : ClassMap<Post>
{
public PostMap()
{
Table("Post");
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.Title);
HasManyToMany(x => x.Tags)
.Table("PostTags")
.ChildKeyColumn("Tag")
.ParentKeyColumn("Post")
.Cascade.SaveUpdate();
}
}
public class PostTagMap : ClassMap<PostTag>
{
public PostTagMap()
{
Table("Tag");
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.Name);
HasManyToMany(x => x.Posts)
.Table("PostTags")
.ChildKeyColumn("Post")
.ParentKeyColumn("Tag")
.Cascade.None();
}
}
Сохранение происходит через SaveOrUpdate в этом хранилище:
public class NHRepository : NHRepositoryBase, INHRepository
{
public NHRepository(IFactory factory)
: base(factory)
{
this.session = this.sessionFactory.OpenSession();
}
public virtual TObject SaveOrUpdate<TObject>(TObject obj) where TObject : Domain.UniqueItem
{
var persistedObject = this.session.SaveOrUpdateCopy(obj);
this.Commit();
return persistedObject as TObject;
}
}
У меня проблема при попытке сохранить элемент «Пост» с некоторыми тегами, где эти теги также относятся к некоторым другим вопросам. Сохранение сообщения приводит к тому, что теги теряют связь с другими вопросами. Я думаю, причина в том; в этом сценарии у меня нет сообщений, включенных в элементы Tag на данный момент, хотя в базе данных есть отношения.
Итак, я хочу ограничить уровень стойкости. Когда я сохраняю элемент Post, он должен только создавать отношения, а не удалять другие отношения между Post и Tag.
Где (в картографировании или хранилище) и как мне добиться этого ограничения?