2011-02-28 48 views
0

我非常確定NHibernate可以完成什麼樣的事情,但我想在這個社區上進行檢查。NHibernate映射:與另一個表中的記錄相對應的實體屬性

如果我有一個實體的Foo:

public class Foo 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool HasRegistered { get; set; } 
} 

我想物業HasRegistered是真實的,如果有在Actions表中有相應的記錄(即有富的Id爲外鍵和一個特定的代碼'BLAH'在另一個字段中),如果沒有則爲假。

因此,例如,HasRegistered會如果有Action記錄具有以下字段爲真:

  • FooId(等於Foo的Id
  • Code(等於值 'BLAH' )

這樣的映射可能嗎?

回答

0

從我的NHibernate的知識,這是不可能的「透明」映射功能,像財產或者你可以用袋做 OS 設置等.. 最簡單的方法到正在使用公式而不是屬性並使該屬性爲「不可變」,因此該屬性涉及插入/更新方案。 希望這有助於。

所以這可能是一個例子:

<property 
     name="HasRegistered" 
     formula="sql formula to evaluate" 
     insert="false" update="false"/> 

爲約NHibernate的映射的詳細信息源(在這種情況下屬性)設有大約如下: NHibernate mapping: property

+0

到目前爲止我可以告訴,你剛剛告訴我這是可能的,只要我能以某種方式將實體的Id加入到SQL表達式中(即公式可以是動態的)。 – David 2011-02-28 10:24:36

+1

你可以放在公式中的表達式是一個任意的SQL表達式(就像我從ayende提供的鏈接所說的那樣),你可以把一個Select ...從Actions裏面的Actions.Id = Id(Nhibernate把這個Id前綴轉換成來自coulumn的表名稱)和Actions.Code ='BLAH'。這可能是一個例子,另一種方法是用CASE WHEN來做,但我認爲第一個是可取的,因爲你沒有一套選擇的價值,但你有一個單一的表達來評估IF有一個相關的記錄和如果有代碼價值='BLAH' – Hoghweed 2011-02-28 10:33:03

+0

謝謝。關於Id的那一點是我需要知道的。 – David 2011-02-28 10:44:47

相關問題