2010-02-09 4 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에 쿼리를 사용할 수 있습니까? 그렇다면 어떤 오류가 발생했으며 어떤 매핑을 사용 했습니까? 그렇지 않다면, 당신은 문서에 대한 포인터를 찾고 있습니까? –

+0

현재 Entity.Calculated를 매핑하고 있지 않기 때문에 nhibernate에서 매핑되지 않은 속성 오류가 발생한다는 것을 알고 있기 때문에이 작업을 시도하지 않았습니다. 나는 포인터 및/또는 문서를 찾고 있습니다. – longday

답변

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

+0

주사 어디서? 수식에있는 "금액 - 지불 됨"은 속성이 아닌 필드를 나타냅니다. –

+0

나는 lambda 1 시간을 쓰고 속성을 return expression.compile(). invoke (invoice);를 호출하여 표현식을 사용하고 싶습니다. 또한 nhibernate는 SQL 구문을 기반으로 한 수식 대신 표현식을 사용합니다. 이 방법은 알고리즘 1 번만 작성합니다. 나는 새로운 질문으로 스스로를 이끌었다 고 생각한다. 질문을하는 방법을 결정하면 새로운 질문에 대한 링크를 게시합니다. – longday