Запрет NHibernate от попытки удалить коллекцию ассоциаций - PullRequest
1 голос
/ 07 апреля 2011

Я использую NHibernate со службами RIA, следующая ассоциация вызывает у меня проблемы.

User hasMany UserRoleGrants via the property user.Roles

Когда я пытаюсь обновить своего Пользователя, клиент silverlight передает сущность Пользователь на уровень обслуживания, но без заполненного свойства Роли (кажется разумным, поскольку это может быть большая коллекция, поэтому зачем отправлять ее туда и обратно по сети). Это заставляет NHibernate попытаться удалить UserRoleGrants для этого пользователя.

Такое ощущение, что я хочу сделать эквивалент session.Load, но только для свойства user.Roles, а не для всего объекта.

Как мне этого добиться?

Редактировать: вот мое беглое отображение

public UserMap()
{
    Id(x => x.Id).GeneratedBy.HiLo("10000");
    Map(x => x.UserName).Unique().Not.Nullable().Length(255).Default(string.Empty);

    HasMany(x => x.RoleGrants).KeyColumn("User_id").Cascade.None().Access.CamelCaseField().LazyLoad();
}

Спасибо

Ответы [ 3 ]

3 голосов
/ 07 апреля 2011

вероятно, вы не должны позволять объекту пересекать границу обслуживания.Вместо этого используйте DTO и отправьте его в сервис.Этот вопрос может помочь: Как использовать NHibernate и DTO с RIA Services

0 голосов
/ 07 апреля 2011

Как правило, мы используем DTO для уровня службы.

Если вы получаете пользователя из своей базы данных, обновляете поля и сохраняете, коллекция ролей не будет нарушена.Он загружен и не изменяется, поэтому не будет удален.

0 голосов
/ 07 апреля 2011

если вы хотите инициализировать вашу коллекцию, вы можете использовать NHibernateUtil.Initialize () (см. this , раздел 16.1.4.).
однако - если вы не используете этоСбор в любом месте, не очень хорошая идея, чтобы загрузить его.
Вы рассматривали вопрос о том, чтобы сделать отношение не каскадным?

...