У меня есть простые отношения многие ко многим между классом User и классом Place.Это отношение представлено свойством «Соседство» пользователя
public class User
{
public virtual IList<UserPlace> Neighbourhood { get; set; }
}
Класс UserPlace - это просто компонент, который добавляет один фрагмент информации к отношениям между пользователем и местом:
public class UserPlace
{
public virtual User User { get; set; }
public virtual Place Place { get; set; }
public virtual bool IsDefault { get; set; }
}
Соотношение отображается следующим образом:
public class UserMappings : ClassMap<User>
{
//... other mappings
HasMany(x => x.NeighbourHood)
.Component(c =>
{
c.Map(x => x.IsDefault);
c.References(x => x.Place).Cascade.None();
}
).Not.LazyLoad().Cascade.SaveUpdate();
}
Когда создается пользователь, из базы данных загружается и добавляется несколько мест, причем для одного из них установлено значение по умолчанию.Когда пользователь сохраняется, связанные сущности UserPlace также сохраняются.
Проблема, с которой я сталкиваюсь, заключается в том, что каждая сущность Place , связанная с UserPlace, также обновляется.Это нежелательный эффект, и я пытался не допустить, чтобы Cascade to Place состоялся (каламбур не предназначен), установив для Cascade значение None () ... однако это ничего не меняет.
Iудалось остановить это обновление, указав, что не следует обновлять каждое свойство в Place ([PropertyName] .Not.Updated ()).Это работает, но это не решение.
У кого-нибудь есть какие-либо идеи о том, как я могу предотвратить это?
Редактировать : Отображение объекта Place имеет DynamicUpdate (), также сущность не должна изменяться при сохранении пользователя.
PS!Я не думаю, что это имеет значение для этого сценария (но я могу ошибаться!), Но учтите это также: сущности Place загружаются вне NHibernate (используя ADO.NET и хранимую процедуру,из-за некоторых геопространственных запросов, которые я не мог сделать с помощью NHibernate), а затем подключил к сеансу, вызвав Session.Update () для каждого объекта.