NHibernate:仅按id向多对多集合添加实体
我在找一条捷径。我有一些NH实体具有多对多关系。大概是这样的:NHibernate:仅按id向多对多集合添加实体,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我在找一条捷径。我有一些NH实体具有多对多关系。大概是这样的: public class Customer : EntityBase<Customer> { public virtual IList<Category> Categories { get; set; } } public class Category : EntityBase<Category> { public virtual IList<Customer> Cu
public class Customer : EntityBase<Customer>
{
public virtual IList<Category> Categories { get; set; }
}
public class Category : EntityBase<Category>
{
public virtual IList<Customer> Customers { get; set; }
}
customerEntity.Categories.Add(new Category { Id = 2 });
原因是该应用程序是一个ASP.NET MVC应用程序,我正在使用ViewModels进行查看。这些Customer
ViewModels最终会有一个列表
用于类别选择,当我将该ViewModel映射到相应的Customer
实体时,我希望能够将这些类别ID吸进Categories
列表中,而不必先点击数据库检索它们
我希望能够做到这一点的部分原因是我希望最小化数据库调用,但我也希望我的mapper类能够创建Customer
实体,而不必调用我的服务层去请求其他对象……这看起来像是糟糕的设计。我还希望避免添加另一个层来调用映射器,然后执行其他映射工作,从存储库中提取实体(存储库本身通过域服务层访问)
我签出了idbag
,但其中一个我使用的是Fluent NHibernate,它不支持这种结构,另外两个我从文档中收集到的信息将给我一个关于实体的列表,我仍然希望能够访问这些集合中的完整实体
我对NHibernate的要求是否过高?使用:
customerEntity.Categories.Add(session.Load(2));
Load将返回一个代理,不会命中数据库。您可以在不访问数据库的情况下访问代理的ID属性,但是如果您访问任何其他属性,NHibernate将加载代理。不幸的是,我的会话没有直接暴露于ASP.NET MVC应用程序。我必须打电话到另一个图书馆的存储库。我希望我的ViewModel映射器能够直接与存储库层通信。有什么办法吗?好吧,让我自己纠正一下——我通常不会从MVC应用程序访问会话。
customerEntity.Categories.Add(session.Load<Category>(2));