0

您能否爲以下情形建議一個有效的映射。兩個表:具有價值對象映射的流利Nhibernate表

CREATE TABLE "ORDER" 
    (
    "ID"  NUMBER(20,0) NOT NULL ENABLE, 
    "STATUS_ID" NVARCHAR2(10,0) 
); 

CREATE TABLE "STATUS" 
    (
    "ID"  NVARCHAR2(10,0) NOT NULL ENABLE, 
    "DESCRIPTION" NVARCHAR2(250,0) 
); 

各個類別是:

public class Order 
{ 
    public virtual Id { get; set; } 
    public virtual Status { get; set; } 
} 

public class Status 
{ 
    public virtual Id { get; set; } 
    public virtual Description { get; set; } 
} 

狀態表值對象的靜態表的屬性Proposal.Status和不應該由代碼來操縱。我希望Order總是加載狀態描述和代碼,即Eager Load Proposal.Status

我讀過這Ayende's blog post但沒有完全相同的情況,儘管我相信這是相當普遍的。

編輯:筆記我試圖做到這一點爲Component Map

回答

1

您正試圖將具有標識的常規實體映射爲組件(值對象)。來自Ayende的文章:

在DDD中,您擁有實體和值對象的概念。 後者 是不可變的,並且沒有標識。在NHibernate中,它們是,映射爲 組件及其字段與包含實體的 嵌入在同一個表中。

當您將值類型映射到與父實體相同的表時,應使用組件映射。你可以在documentation找到更多關於NHibernate類型的信息。

嘗試改爲使用引用映射來完成它,儘管您可能會傾向於使用use HasOne

+0

有趣的是,我已經開始使用'HasOne',然後才意識到它不合適。我確實認爲Status是一個Value Object,但是它會有一個自然的Id字段('StatusCode'),所以我猜測它不是。 'References'完成這項工作。 – Tsar