2010-06-22 86 views
8

比方说,我有以下实体:如何用NHibernate流畅地映射一个没有setter和没有支持属性的属性?

public class CalculationInfo 
{ 
    public virtual Int64 Id { get; set; } 

    public virtual decimal Amount { get; set; } 

    public virtual decimal SomeVariable { get; set; } 

    public virtual decimal SomeOtherVariable { get; set; } 

    public virtual decimal CalculatedAmount 
    { 
     get 
     { 
      decimal result; 

      // do crazy stuff with Amount, SomeVariable and SomeOtherVariable 

      return result; 
     } 
    } 
} 

基本上我想读所有的领域与CalculatedAmount例外,我只是想写,而不是读写信给我与NHibernate的数据库回到英寸

每个类似的问题和相应的答案都已经处理了指定该值的后备存储,我不会在这种情况下。

我该如何使用Fluent NHibernate来完成这项工作?

谢谢!

UPDATE:下面是我尝试和错误它导致:

这里是我的属性映射...

Map(x => x.CalculatedAmount) 
     .ReadOnly(); 

和异常它产生...

找不到在类属性的设置'CalculatedAmount 'xxx.CalculationInfo'

回答

2

我不使用流利,但在映射没有二传手一个持久属性映射与access="readonly",因此寻找类似.Readonly()

(只读从模式观点;该值被写入数据库并用于脏检查)

+0

我已经更新了我的答案,以解决......这是第一件事情之一我遇到过,但我仍然以上述例外结束。你能想到在NHibernate的设置,将阻止这个工作? – 2010-06-23 14:21:19

+0

您可以导出FluentNH生成的XML吗? – 2010-06-23 16:59:55

0

看起来这是一个计算值。如果你可以在任何时候计算这个值,那为什么要存储它呢?

+0

伟大的问题...简短的答案是不可否认的。即使我的计算方法发生变化,我总是可以指出在给定的时间点/与某个动作相关的时间内计算出的结果。 – 2010-06-23 02:14:16

+0

@Brandon林顿:够公平的。 +1。为什么私人支持领域是不受欢迎的,还是更多是美学问题? – 2010-06-23 02:24:44

+0

它只是永远不会结束使用......每次都应该执行计算,因为可变因素随时都可能发生变化。 – 2010-06-23 14:15:48

5

我想通了,顺便得到这个映射功能NHibernate的工作就是简单地将访问属性:

Map(x => x.CalculatedAmount).Access.ReadOnly(); 
相关问题