2010-02-09 18 views
4

域對象如何包含一個屬性,該屬性計算來自其他數據庫映射屬性的值,以便通過nhibernate可以在域對象實例和db級別中使用計算的屬性。 LINQ。NHibernate.Linq - 自定義/計算屬性表達式

我想直接對象工作時可以使用的屬性:

Console.WriteLine(Entity.Calculated.ToString()); 

而且隨着nhibernate.linq工作時

var q = from e in session.Linq<Entity>() 
       where e.Calculated > 0 
       select e; 
+0

您是否嘗試過這種使用LINQ和查詢?如果是的話,你會得到什麼錯誤以及你使用了什麼映射?如果不是,你只是在尋找指向文檔的指針? – 2010-02-09 14:47:41

+0

我沒有嘗試這個,因爲我知道nhibernate會給我一個未映射的屬性錯誤,因爲我目前沒有映射Entity.Calculated。我正在尋找指針和/或文檔。 – longday 2010-02-09 16:01:59

回答

3

你需要複製的邏輯類和映射。這裏有一個例子:

類:

public class Invoice 
{ 
    public virtual int Id { get; protected set; } 
    public virtual decimal Amount { get; set; } 
    public virtual decimal Paid { get; set; } 
    public virtual decimal Balance 
    { 
     get { return Amount - Paid; } 
    } 
} 

映射:

<class name="Invoice"> 
    <id name="Id"> 
     <generator class="hilo"/> 
    </id> 
    <property name="Amount"/> 
    <property name="Paid"/> 
    <property name="Balance" formula="Amount - Paid" access="readonly"/> 
</class> 

現在你可以在Invoice.Balance

+0

完美!你知道是否有方法使用linq表達式來注入公式?表達式> exp = i => i.Amount - i.Paid; – longday 2010-02-09 16:00:20

+0

注入哪裏?請記住公式中的「金額 - 付費」是指字段,而不是屬性。 – 2010-02-09 22:15:13

+0

我想寫一個lambda 1時間,並通過調用return expression.compile()來讓該屬性使用表達式。invoke(invoice);並且還有nhibernate使用表達式代替基於sql語法的公式。這樣我只寫一次算法。我想我已經引導自己提出一個新問題。一旦我確定如何提問,我會發佈一個新問題的鏈接。 – longday 2010-02-09 23:05:50