我的域对象上有一个属性,它公开如下:
public virtual IEnumerable<WorkPost> WorkPosts
{
get { return sheetPosts; }
private set
{
Guard.AssertAssignableFrom(value, typeof (IList<WorkPost>));
sheetPosts = value as IList<WorkPost>;
}
}
如您所见,内部表示是一个IList<WorkPost>
,分配的值(它是来自 NHibernate 的延迟加载代理)然后被转换为正确的类型。这个实现让我觉得很糟糕,因为它依赖于 NHibernate 代理的内部表示。为了确保 NHibernate 将代理生成为列表,我使用AsList()
声明为属性创建了流畅的映射:
HasMany(sheet => sheet.WorkPosts).KeyColumn("sheetId").AsList();
但这给了我比要求更多的东西,因为列表语义意味着排序再次向数据库模型添加了一些额外的字段以及一些额外的查询(由于提交时更新了排序字段),所以上面的“AsList”有去。
我如何控制 NHibernate 在生成代理时应该返回什么类型的接口?(注意:更改IEnumerable
属性的返回类型不是我正在寻找的答案:-))