Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NHibernate:仅按id向多对多集合添加实体_Nhibernate_Fluent Nhibernate - Fatal编程技术网

NHibernate:仅按id向多对多集合添加实体

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

我在找一条捷径。我有一些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; }
}
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));