在nHibernate关系中使用Lite版本的实体?

Ami*_*abh 5 nhibernate performance hibernate castle-activerecord

在某些情况下创建较轻版本的Entity是一个好主意,只是出于性能原因指向同一个表但映射的列数较少.例如,如果我有一个具有50列的联系表,并且在少数相关实体中我可能对FirstName和LastName属性感兴趣,那么创建一个轻量级的Contact表是个好主意.例如

public class ContactLite
{
   public int Id {get; set;}
   public string FirstName {get; set;}
   public string LastName {get; set;}

}
Run Code Online (Sandbox Code Playgroud)

是否可以将多个类映射到同一个表?

dot*_*joe 5

不要将多个类映射到同一个表.我尝试了一次虽然它对我正在做的事情起作用,但我确定它会在以后咬我.最好使用投影来填充"轻"类.


Die*_*hon 4

这不是一个好主意。相反,始终映射完整的类并创建可以使用Transformers.AliasToBeanLINQ 进行投影的较小类。

后者的一个例子:

var lightContacts = (from contact in session.Linq<Contact>()
                     where contact.Country = "Argentina"
                     select new LightContact
                            {
                                Id = contact.Id
                                FirstName = contact.FirstName,
                                LastName = contact.LastName
                            })
                    .ToList();
Run Code Online (Sandbox Code Playgroud)

即使按不同的字段进行过滤,这也只会从数据库中选择这三个字段。

值得注意的是,使用 LINQ,您还可以使用匿名类型来选择所需的任何投影,而无需创建其他类型或映射。

  • 1.2 已经很旧了,目前完全不受支持。你真的应该考虑升级。此外,WCF 不应该与该决定有任何关系;如果是这样,则说明您在错误的层上工作。 (2认同)