2009-11-12 42 views
0

我有一個場景,我有一個父類,並帶有一些我們可以調用的定義,如果Foo是唯一的,然後是我選擇調用Bar的子類。他們一起做Foo吧! :)如何映射NHibernate插入表?

public class Foo 
{ 
    public Foo() 
    { 
     Bars = new List<Bar>(); 
    } 

    // Internal id only, should probably not even map it 
    public virtual int Id { get; set; } 
    // A hashed searchable id 
    public virtual string UId { get; set; } 
    public virtual DateTime CreatedAt { get; set; } 
    public virtual DateTime UpdatedAt { get; set; } 

    public ICollection<Bar> Bars { get; private set; } 
} 

public class Bar 
{ 
    public virtual int Id { get; set; } 
    public virtual long Version { get; set; } 
    public virtual DateTime CreatedAt { get; set; } 
    public virtual SomeHash { get; set; } 
    public virtual Foo Foo { get; set; } 
} 

我可以很容易地用xml流暢地映射它。我不知道如何映射的是以下場景:我不需要在這裏更新任何東西。只要有一些變化,我應該插入一個新的行。從來沒有更新或刪除,我找不到任何有關解決這個問題的信息,即使我知道這應該是可能的。我如何告訴NHibernate版本表中的每個更改都應該導致插入?

回答

2

看看class元素的mutable屬性。根據documentation,將其設置爲false可防止更新和刪除

+0

而且你在哪裏! – mhenrixon

2

在Fluent中,您可以調用映射到access="readonly"屬性的Readonly屬性。

public class FooMap : ClassMap<Foo> 
{ 
    public FooMap() 
    { 
     ReadOnly(); 

     Id(x => x.Id).ReadOnly(); 
     // etc. 
    } 
} 

雖然我從來沒有使用它,所以我不確定它會爲你需要的工作。

+0

喬希將其稱爲Mutable。我更喜歡他們沒有改變流利的所有名字:) – mhenrixon

0

您可以在您的映射中使用空白<sql-update><sql-delete>標記。這些應該在班級嘗試更新或刪除時被調用。但是nhibernate仍然應該插入