我的实体模型中是否应该有外键列?

时间:2012-07-23 21:05:11

标签: c# nhibernate fluent-nhibernate

我从实体框架到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);

1 个答案:

答案 0 :(得分:3)

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

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

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

Object-Relational Mapping的重点应该是允许你使用OOP最佳实践(Object),数据库最佳实践(Relational)而不是混合它们之间的概念(这就是名称的映射部分{{ 3}})。

在此之后,有些ORM比其他ORM更好。提示: stands for