我正在使用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();
}
由于
答案 0 :(得分:3)
可能你不应该让实体跨越服务边界。请使用一些DTO并将其发送到服务。这个问题可以提供帮助:How to use NHibernate and DTOs with RIA Services
答案 1 :(得分:0)
如果要初始化集合,可能需要使用NHibernateUtil.Initialize()(参见this,第16.1.4节。)。
但是 - 如果您没有在任何地方使用该集合,那么加载它并不是一个好主意
你考虑过建立非级联关系吗?
答案 2 :(得分:0)
通常我们在服务层使用DTO。
如果从数据库中获取用户,更新字段并保存,则不会干扰角色集合。它是延迟加载的,因此不会被删除。