Как правильно изменить порядок списка при использовании NHibernate?
Это мой список:
private IList<MediaItem> media = new List<MediaItem>();
public virtual IList<MediaItem> Media { get { return media.ToReadOnlyCollection(); } }
И я изменяю порядок, передав упорядоченный список MediaItem
ids (Guid
):
public virtual void UpdateMediaOrder(IList<Guid> mediaIds) {
// TODO remove any unmatched items
foreach (var mi in Media)
{
int index = mediaIds.IndexOf(mi.Id);
if (index == -1)
index = media.Count() -1;
media[index] = mi;
}
}
Когда я переупорядочиваю список (в данном случае список, содержащий 3 элемента), NHibernate выполняет следующее:
NHibernate: DELETE FROM PortfolioProjectMedia...
NHibernate: INSERT INTO PortfolioProjectMedia...
NHibernate: INSERT INTO PortfolioProjectMedia...
NHibernate: INSERT INTO PortfolioProjectMedia...
Полагаю, я ожидалчтобы увидеть Updates
вместо очистки списка.
Я что-то не так делаю, или это намеченное поведение?
Обновление
Если это еще не ясно, мне нужно отобразить свой список как NHibernateСписок (не набор или сумка), чтобы индекс предметов был постоянным.
Вот отображение коллекции MediaItem
на Project
.MediaItem
не имеет ссылки на проекты.Отношения многие ко многим.
HasManyToMany(p => p.Media)
.Table("PortfolioProjectMedia")
.Access.CamelCaseField()
.ParentKeyColumn("ProjectId")
.ChildKeyColumn("MediaItemId")
.Cascade.SaveUpdate()
.AsList(i => i.Column("ListIndex").Type<int>());