5

我从实体框架来到 NHibernate。在查看如何创建我的域实体时,我注意到在某些示例中它们不包括外键关系列。由于Session该类包含一个Load()方法,因此可以只使用对象而无需访问数据库而不是主键。这是在 NHibernate 中构建实体模型时的正常做法吗?

示例实体

public class BlogPost : Entity
{
    public virtual string Name { get; set; }

    //Should this be here
    public virtual int AuthorID { get; set; }

    public virtual Author Author { get; set; }
}

创建实体

BlogPost post = new BlogPost
{
    Name = "My first post",
    Author = session.Load<Author>(1) //Avoids hitting the database
};

session.Save(post);

- 或者 - -

BlogPost post = new BlogPost
{
    Name = "My first post",
    AuthorID = 1 //Use the id of the object
};

session.Save(post);
4

1 回答 1

4

您应该使用完整的实体/对象,而不是使用外键。

外键是数据库概念。当您进行面向对象编程时,它们没有多大意义。在进行 OOP 时,您将对象组合在一起。在您的情况下, aBlog 有一个集合PostsPost 父母Blog

实体 ID 仅用于唯一标识实体。

对象-关系映射的重点应该是允许您使用 OOP 最佳实践(对象)、数据库最佳实践(关系),而不是混合它们之间的概念(这就是 Mapping 名称的一部分所代表的意思)。

一些 ORM 在遵循这一点方面比其他 ORM 更好。提示:NHibernate

于 2012-07-23T21:11:59.610 回答