我在弄清楚如何从包含每个外键的ID的表单数据转换为使用流畅的NHibernate创建的实际模型时遇到了一些麻烦。
比如说我们有一个班级:
public SubcategoryMap()
{
Table("subcategories");
Id(x => x.Id);
Map(x => x.Name);
References<Category>(x => x.Category);
}
和它的地图:
Subcategory
现在当有人发布表单数据来创建新的public class SubcategoryDTO
{
public String Name { get; set; }
public int Category_id { get; set; }
}
时,它会以ID(int)的形式出现。我正在使用Automapper BTW。从客户端收到的模型中有哪些适当的方法(有或没有Automapper):
Subcategory
返回上面的Category
课程?
当然,我不必实际查询数据库以获取有问题的Subcategory
,将其分配给Subcategory
,然后保存{{1}} ...
谢谢!
答案 0 :(得分:3)
您希望在会话中使用Load()方法。
这是一篇非常古老的文章解释语法。
https://ayende.com/blog/3988/nhibernate-the-difference-between-get-load-and-querying-by-id
关键部分是
这就是NHibernate在为您提供相同内容时维护OO外观的方式 直接使用低级API的优化优势。
是您不需要从数据库中获取和保存整个对象。
Load()语法处理所有这些。
所以
session.Save(new SubCategory {
Name = subCategory.Name,
Category = session.Load<Category>(subCategory.Category_id)
};
将进行一次数据库访问
我认为你无法使用Automapper实现这一目标。