从Entity_id到NHibernate中的实体实例

时间:2017-02-21 18:14:12

标签: c# nhibernate fluent-nhibernate

我在弄清楚如何从包含每个外键的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}} ...

谢谢!

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实现这一目标。