我从实体框架到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);
答案 0 :(得分:3)
您应该使用完整的实体/对象,而不是使用外键。
外键是数据库概念。在进行面向对象编程时,它们没有多大意义。在进行OOP时,您正在组合对象。在您的情况下,Blog
的集合为Posts
。 Post
有一个父Blog
等
实体ID仅用于唯一标识实体。
Object-Relational Mapping的重点应该是允许你使用OOP最佳实践(Object),数据库最佳实践(Relational)而不是混合它们之间的概念(这就是名称的映射部分{{ 3}})。
在此之后,有些ORM比其他ORM更好。提示: stands for 。