我正在寻找捷径。我有一些具有多对多关系的NH实体。像这样:
public class Customer : EntityBase<Customer>
{
public virtual IList<Category> Categories { get; set; }
}
public class Category : EntityBase<Category>
{
public virtual IList<Customer> Customers { get; set; }
}
请记住这是一个非常简单的描述,所以抵制诱惑,建议我不要使用多对多的安排,或者我应该使用值类型或类似的东西。
在数据库方面,这种关系是通过一个包含两列的单独表格完成的 - Customer_Id
和Category_Id
。
我真的希望能够将现有的Category
添加到Customer
,而无需从数据库中检索完整的实体。也许是这样的:
customerEntity.Categories.Add(new Category { Id = 2 });
原因是该应用程序是一个ASP.NET MVC应用程序,我正在使用ViewModels来查看我的视图。这些Customer
ViewModel以类别选择的List<int>
结尾,当我将ViewModel映射到相应的Customer
实体时,我很想能够吸引那些类别ID到Categories
列表中,而不必先命中数据库来检索它们。
我希望能够做到这一点的部分原因是我想最小化数据库调用,但我也想让我的mapper类能够创建Customer
实体而不必调用我的服务层去寻求其他对象......这看起来像是糟糕的设计。我还想避免添加另一个层来调用映射器,然后执行从存储库中获取实体的其他映射内容(它本身通过域服务层访问)。
我检查了idbag
,但是对于一个我正在使用Fluent NHibernate并且它不支持该构造,并且我可以从文档中收集两个来给我一个{{1}在实体上,我仍然希望能够访问这些集合中的完整实体。
我对NHibernate的要求太高了吗?
答案 0 :(得分:3)
customerEntity.Categories.Add(session.Load<Category>(2));
Load将返回代理并且不会访问数据库。您可以在不访问数据库的情况下访问代理的ID属性,但是如果您访问任何其他属性,NHibernate将加载代理。