Fluent nhibernate 如何在nhibernate中映射外键列?

Fluent nhibernate 如何在nhibernate中映射外键列?,fluent-nhibernate,nhibernate-mapping,Fluent Nhibernate,Nhibernate Mapping,事实上,这个问题比描述的更复杂。我是nhibernate的新手,我想映射一个带有外键列的表。在大多数nhibernate示例中,外键列分配通常通过设置引用的实体来实现。我的意思是,如果我有一个CategoryId列,那么我需要一个Category属性,在我查看的示例中,通常设置了Category属性。在我的例子中,我不想设置实体属性,而是设置外键属性 public class Post { public virtual long Id { get; set; }; public

事实上,这个问题比描述的更复杂。我是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实体时,我不想设置category属性

Post post = new Post { Content = "content", Category = aCategoryEntity };
session.Save(post);
下面的示例是我想要实现的方式

Post post = new Post { Content = "content", CategoryId = 3 };
session.Save(post);
我如何摆脱它?

您的实体“Post”不需要CategoryId和Category属性

通常,您也会映射类别,并且Post映射会使用外键将两者关联起来

你可以试试这样的

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

希望这有帮助。

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

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

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

session.Save(post);
Post Post=新职位
{ 
Content=“Content”,
类别=会话。加载(类别ID)
};
session.Save(post);

如果您仍然被卡住了,为什么不发布您的映射呢。我知道,这不是一个最佳实践,对于ORM来说这是一个例外,但无论如何我都需要。您的建议在我脑海中,但我正在寻找一个确切的解决方案。顺便说一下,我正在使用fluent nhibernate进行映射。我想我错过了一种方法或其他东西,可以做类似的事情。你需要考虑一下利亚姆的答案。代码无法知道类别id是否有效,因此它将违反外键并引发异常。通常,当您觉得自己在对抗某项技术时,这是因为您是。如果您有机会重新设计,以便可以使用类别对象作为Post的属性,这将为您省去很多麻烦。:)我要说服一位同事。我做到了:)处理对象是摆脱它的正确方法。