我正在使用最新版本的NHibernate,最近我偶然发现了一个有趣的问题。在某些情况下ORM额外的计算列?
比方说,我有一个名为Profile的表,我想要接收我的所有配置文件的列表。但是,有了它,我有一个名为CanDelete
的计算列,它禁止在(例如)正在使用的情况下删除配置文件。
但是,这CanDelete
计算列不是我的实体的一部分,我不想污染实体,当我在这种情况下只需要CanDelete
值 - 并且对每个配置文件单独计算它太慢。
有没有在NHibernate的方式执行某些查询并获取该查询的行作为对象,但然后以某种方式获取一个额外的计算列以及?
假设我正在使用N层体系结构。在表示层中,我需要一个所有配置文件的列表(并且对于每个配置文件,我是否可以删除它)。我的业务逻辑层和数据访问层如何看起来像?
现在在我的资源库中,我有一个GetProfiles
方法,然后我运行了一个CanDeleteProfile
方法,用于获取每个配置文件。但就像我上面提到的那样,它太慢了。我可以创建一个GetProfilesWithCanDeleteStatus
方法,但这需要我创建一个专门的实体,并在其上包含该计算列。
当我不想在配置文件列表中击中O(n^2)
性能时,如何以适当方式构建此建议,您有什么建议?我想避免n + 1问题。
我不一定在寻找一个NHibernate解决方案(我标记了NHibernate,因为它可能有这种类型的东西的一些特定的工具),并欢迎其他ORM的一般解决方案。