我正从 Entity Framework 转到 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);
最佳答案
您应该使用完整的实体/对象而不是外键。
外键是数据库的概念。当您进行面向对象编程时,它们没有多大意义。在进行 OOP 时,您是在将对象组合在一起。在您的例子中,博客
有一个 帖子
集合。 Post
有一个父Blog
等
实体 ID 仅用于唯一标识实体。
整点Object-Relational Mapping应该是允许您使用 OOP 最佳实践(对象)、数据库最佳实践(关系)而不是混合它们之间的概念(这就是名称 stands for 的映射部分)。
一些 ORM 在遵循这一点上比其他的更好。提示: NHibernate .
关于c# - 我的实体模型中应该有外键列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11620506/