阻止NHibernate尝试删除关联集合

时间:2011-04-07 13:50:51

标签: nhibernate wcf-ria-services

我正在使用NHibernate和RIA服务,以下关联会给我带来问题。

User hasMany UserRoleGrants via the property user.Roles

当我尝试更新我的用户时,silverlight客户端将User实体传递给服务层但没有填充Roles属性(看起来很合理,因为它可能是一个大型集合,所以为什么要通过网络来回发送它)。这导致NHibernate尝试删除此用户的UserRoleGrants。

感觉就像我想做一个相当于session.Load但只是为了user.Roles属性而不是整个对象。

我怎样才能做到这一点?

编辑:这是我的Fluent映射

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 个答案:

答案 0 :(得分:3)

可能你不应该让实体跨越服务边界。请使用一些DTO并将其发送到服务。这个问题可以提供帮助:How to use NHibernate and DTOs with RIA Services

答案 1 :(得分:0)

如果要初始化集合,可能需要使用NHibernateUtil.Initialize()(参见this,第16.1.4节。)。
但是 - 如果您没有在任何地方使用该集合,那么加载它并不是一个好主意 你考虑过建立非级联关系吗?

答案 2 :(得分:0)

通常我们在服务层使用DTO。

如果从数据库中获取用户,更新字段并保存,则不会干扰角色集合。它是延迟加载的,因此不会被删除。