如何在nhibernate中映射外键列?

时间:2009-05-21 14:32:50

标签: fluent-nhibernate nhibernate-mapping

实际上,问题比描述的更复杂。我是nhibernate的新手,我想用外键列映射一个表。在大多数nhibernate样本中,外键列分配通常通过设置被引用实体来实现。我的意思是,如果我有一个CategoryId列,那么我需要一个Category属性,在我看的样本中,通常会设置Category属性。在我的情况下,我不想设置实体属性,而是设置外键属性。

public class Post
{
    public virtual long Id { get; set; };
    public virtual string Content { get; set; };
    public virtual long CategoryId { get; set; };
    public virtual Category Category { get; set; };
}

当我尝试保存Post实体时,我不想设置类别属性,如下面的示例所示。

Post post = new Post { Content = "content", Category = aCategoryEntity };
session.Save(post);

下面的示例是我想要实现的方式。

Post post = new Post { Content = "content", CategoryId = 3 };
session.Save(post);

我怎样才能摆脱它?

3 个答案:

答案 0 :(得分:1)

Session.Load是我在这里使用的解决方案。

Post post = new Post 
{ 
   Content = "content", 
   Category = Session.Load<Category>(categoryId)
};

session.Save(post);

答案 1 :(得分:0)

您的实体“发布”不需要CategoryId和Category属性。

通常你也会映射Category,你的Post映射会使用外键来关联它们。

你可以尝试这样的事情

session.Save(new Post(){ Category = new Category(){ Id = 3 } });

希望这有帮助。

答案 2 :(得分:0)

我不知道这对NHibernate是否可行。 ORM的重点是处理对象,而不是RDMS外键。