C#, NHibernate, 存档
     

nhibernate 配方属性

nhibernate 的一个经常被忽视的特点是公式属性的使用。公式属性是不映射到数据库中的列, 而是使用原始 sql 查询映射的属性。

公式在 nhibernate 映射文件中使用与普通属性相同的属性元素进行映射, 只需替换公式关键字的列关键字即可。

<property name="FormulaPropertyName" formula="SQL STATEMENT"></property> 

基本思想是, 当 nhibernate 加载对象时, 它将同时颁发自定义 sql, 从而允许复杂的只读属性将其工作卸载到数据库中。

例如, 假设您有一个表示电子商务网站上订单的类。订单通常由行项目组成, 一个常见的问题是作为一个整体问订单 "你的小计是什么?" 在不权衡利弊的情况下, 假设您不想小计作为字段存储在订单表中。

一个完全可以接受的解决方案是具有这样的只读属性:

公共十进制子总计 { 
     获取 { 
          十进制小总计 = 0; 
          在这里。线项目) { 
               小道达尔 + = 李。延长价格;即, 单位订购的时间单价。
          } 
          返回小计; 
     } 
} 

然而, 这是关于 nhiber配方的帖子。因此, 为了这篇文章的目的, 假设 (无论出于何种原因), 你不能或不想循环访问每个行项目来计算你的小计。然后, 您可以使用 nhibernate 公式将上述功能替换为以下映射。

<property name="SubTotal" access="field.camelcase-underscore" name="SubTotal" access="field.camelcase-underscore"></property name="SubTotal" access="field.camelcase-underscore"> 
公式 = "从 lines 项中选择总和 (单位 * 价格), 其中 linerites. 订单号 = 此。订单号 "/>

订单类可以更新, 如下所示:

私有十进制 _ 小数;

公共十进制子总计 {
     获取 {返回 _ 小总计;}
}

上面的例子很简单, 忽略了几个现实世界的问题, 它的意图仅仅是演示 nhibernate 公式的用法。我发现公式的用途有限, 但在某些特定于应用程序的方案中, 它们可以派上用场。

About Jason

Jason 是一位经验丰富的企业家兼软件开发人员,擅长领导力、移动开发、数据同步和 SaaS 架构。他获得了阿肯色州立大学计算机科学学士学位( 学士学位.
View all posts by Jason →

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注